整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享。
首先,要压缩的图片格式不能说动态图片,你可以使用bmp、png、gif等,至于压缩质量,可以通过BufferedImage来指定。
在C盘的temp下放置一张图片pic123.jpg,尽量找一个像素高一点的图片,这里我找了一张5616*3744的。

Java代码  

  1. package test;

  2. import java.io.*;

  3. import java.util.Date;

  4. import java.awt.*;

  5. import java.awt.p_w_picpath.*;

  6. import javax.p_w_picpathio.ImageIO;

  7. import com.sun.p_w_picpath.codec.jpeg.*;

  8. /**

  9. * 图片压缩处理

  10. * @author 崔素强

  11. */

  12. public class ImgCompress {

  13. private Image img;

  14. private int width;

  15. private int height;

  16. @SuppressWarnings("deprecation")

  17. public static void main(String[] args) throws Exception {

  18. System.out.println("开始:" + new Date().toLocaleString());

  19. ImgCompress imgCom = new ImgCompress("C:\\temp\\pic123.jpg");

  20. , 400);

  21. System.out.println("结束:" + new Date().toLocaleString());

  22. }

  23. /**

  24. * 构造函数

  25. */

  26. public ImgCompress(String fileName) throws IOException {

  27. File file = new File(fileName);// 读入文件

  28. img = ImageIO.read(file);      // 构造Image对象

  29. width = img.getWidth(null);    // 得到源图宽

  30. height = img.getHeight(null);  // 得到源图长

  31. }

  32. /**

  33. * 按照宽度还是高度进行压缩

  34. * @param w int 最大宽度

  35. * @param h int 最大高度

  36. */

  37. public void resizeFix(int w, int h) throws IOException {

  38. if (width / height > w / h) {

  39. resizeByWidth(w);

  40. } else {

  41. resizeByHeight(h);

  42. }

  43. }

  44. /**

  45. * 以宽度为基准,等比例放缩图片

  46. * @param w int 新宽度

  47. */

  48. public void resizeByWidth(int w) throws IOException {

  49. int h = (int) (height * w / width);

  50. resize(w, h);

  51. }

  52. /**

  53. * 以高度为基准,等比例缩放图片

  54. * @param h int 新高度

  55. */

  56. public void resizeByHeight(int h) throws IOException {

  57. int w = (int) (width * h / height);

  58. resize(w, h);

  59. }

  60. /**

  61. * 强制压缩/放大图片到固定的大小

  62. * @param w int 新宽度

  63. * @param h int 新高度

  64. */

  65. public void resize(int w, int h) throws IOException {

  66. // SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢

  67. BufferedImage p_w_picpath = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );

  68. , 0, w, h, null); // 绘制缩小后的图

  69. File destFile = new File("C:\\temp\\456.jpg");

  70. FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流

  71. // 可以正常实现bmp、png、gif转jpg

  72. JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

  73. encoder.encode(p_w_picpath); // JPEG编码

  74. out.close();

  75. }

  76. }

运行后在C盘temp下生成一个465.jpg,像素大小为600*400,像素大小是我指定的。用时也就是一两秒的事情,注意,我这张图片是10M的,压缩后是40.5KB
一些细节事项可以参考代码中的注释。

要注意的是,你可能想试一试较大图片的处理能力,如果你的JDK没有指定默认内存,那可能会有如下异常,因为内存不够大:

Java代码  

  1. -4-14 16:25:11

  2. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

  3. )

  4. )

  5. )

  6. )

  7. )

  8. )

  9. )

  10. )

  11. )

  12. )

  13. )

解决方法:
在Eclipse里选:Window->Preference->Installed JREs->Edit(选中jre),
在Default VM Arguments里输入-Xms256m -Xmx1024m,表示最小内存256M,最大1G,然后运行就可以了

请您到ITEYE网站看 java小强 原创,谢谢!
http://cuisuqiang.iteye.com/ !

自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!

java流压缩图片的更多相关文章

  1. 使用java来压缩图片

    使用java来压缩图片,简单几句,清清爽爽 使用0.3的压缩比得到的结果如下(从2.8M压缩到268K,且图片的清晰度看不出明显差别): package carlspringtest; import ...

  2. java 上传图片压缩图片

    package com.bitspace.flame.util; import java.io.File; import java.awt.Image;import java.awt.image.Bu ...

  3. Java 后端压缩图片

    import java.io.*;import java.util.Date;import java.awt.*;import java.awt.image.*;import javax.imagei ...

  4. Java压缩图片

    阅读目录 前言 压缩的要求 实现 优点 其他功能 前言 作为靠谱的java服务端程序员,图片这个事情一直是个头疼的事情. 现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的 ...

  5. java 上传图片 并压缩图片大小

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  6. java 上传图片 并压缩图片大小(转)

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  7. Java压缩图片的实现类

    package com.function; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; ...

  8. java上传并压缩图片(等比例压缩或者原尺寸压缩)

    本文转载自http://www.voidcn.com/article/p-npjxrbxr-kd.html 先看效果: 原图:1.33M 处理后:27.4kb 关键代码; package codeGe ...

  9. java中判断图片格式并且等比例压缩图片

    最近项目中需要判断上传的图片必须是png,jpg,gif三种格式的图片,并且当图片的宽度大于600px时,压缩图片至600px,并且等比例的压缩图片的高度. 具体的实现形式: 大致的思路是: 判断根据 ...

随机推荐

  1. html、jsp页面标签的遍历

    应用场景:最近的项目中二级子页面遍历生成.操作表格比较多,记录一下一直用的遍历方法. 一般此类表格都是通过ajax请求数据,然后从callbackFunction中获取数据集合,遍历生成表: eg: ...

  2. 并发容器之阻塞队列DelayQueue的使用案例及源码分析

    原文连接:(http://www.studyshare.cn/blog-front//blog/details/1167/0 ) 一.队列及阻塞队列概念 1.队列:是一种特殊线性表,特殊之处在于操作是 ...

  3. docker命令总结

    用 docker pull 拉取镜像 root@lishichao-virtual-machine:~# docker pull hello-world Using default tag: late ...

  4. 真实项目中 ThreadLocal 的妙用

    一.什么是 ThreadLocal ThreadLocal 提供了线程的局部变量,每个线程都可以通过 set() 和 get() 来对这个局部变量进行操作,但不会和其他线程的局部变量冲突,实现了线程间 ...

  5. TensorFlow 2.0 入门教程实战案例

    中文文档 TensorFlow 2 / 2.0 中文文档 知乎专栏 欢迎关注知乎专栏 https://zhuanlan.zhihu.com/geektutu 一.实战教程之强化学习 TensorFlo ...

  6. 并发编程-concurrent指南-Lock

    既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述.本文先从synchronized的缺陷讲起,然后再讲述java.util.concurr ...

  7. 2018.10.20 2018NOIP冲刺之酒厂选址

    题目传送门 明显能够看出有一个建图求路程的优化 然而发现10000*10000爆空间QAQ 为了做一些初始化方面的优化 我们发现了一个叫做前缀和的东西 可以在环上查到两个之间的最短距离 同时还要做一些 ...

  8. 如何搭建一个vue项目(完整步骤)

    参考资料 一.安装node环境 1.下载地址为:https://nodejs.org/en/ 2.检查是否安装成功:如果输出版本号,说明我们安装node环境成功 3.为了提高我们的效率,可以使用淘宝的 ...

  9. scrapy基础知识之 scrapy 三种模拟登录策略:

    注意:模拟登陆时,必须保证settings.py里的 COOKIES_ENABLED (Cookies中间件) 处于开启状态 COOKIES_ENABLED = True或 # COOKIES_ENA ...

  10. S7-1200 的运动控制

    S7-1200 CPU本体集成点硬件输出点最高频率为100kHz,信号板上硬件集成点输出的最高频率为20kHz,CPU在使用PTO功能时将把集成点Qa.o,Qa.2或信号板的Q4.0作为脉冲输出点,Q ...