整理文档,搜刮出一个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. TCP/IP 第一章

    1,tcp/ip协议族作用:连接互联网中的计算机,并使其通信.可以想象互联网的计算机有不同的操作系统,如linux.unix.bsd.srv.windows.mac等.这么多操作系统对tcp/ip的实 ...

  2. C++ 洛谷 P1731 [NOI1999]生日蛋糕

    P1731 [NOI1999]生日蛋糕 一本通上也有. 这TM是一道极其简单的深搜剪枝(DP当然可以的了,这里我只讲深搜). 首先圆柱公式:(有点数学基础都知道) V=πR2H S侧=π2RH S底= ...

  3. logging,包

    包 import 方式 所有对包的操作,都相当于对包下的__init__操作 from a.b.c import d b 必须 是包 import 最后只有一个层级 相对导入 . 代表当前路径, .. ...

  4. HDU XXXX:求[L,R]的素数数量(数位DP)

    Problem G Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/131072K (Java/Other) Total S ...

  5. Java中session与application的异同

    客户端的session 其实是标记了你的请求来自哪个浏览器 问题1:永远都一样吗? 答:重启了浏览器,你的session id就改变了, 结果会导致,再无法取回原来在服务端保存的数据. 问题2:假设客 ...

  6. 开源:C# 代码自动生成工具,支持站点前后台

    前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.com/supperlitt/WebAutoCodeO ...

  7. 简述vue中父子组件是怎样相互传递值的(基础向)

    前言 首先,你需要知道vue中父组件和子组件分别指的是什么?   父组件:vue的根实例——用new Vue()构造函数创建的vue实例(实例会有一个挂载点,挂载点里的所有内容可理解为父组件的内容) ...

  8. 微信小程序全局变量改变监听

    问题来源 最近工作需要写小程序页面,其中有个页面情况为:父页面中包含了一个组件页面,组件页面中又包含了另外一个组件页面.需求为:点击最后一个组件页面中的一个view,需要显示最外层父页面中的一个弹出层 ...

  9. ubuntu18.04安装nvidia驱动总结经验

    本人电脑是 DELL Inspiron 3670, 系统装的是ubuntu18.04, 显卡使用的是GeForce GTX 1050 Ti, 在安装nividia显卡的时候花费两天时间,感受颇深,顾总 ...

  10. vue-cli安装搭建初始项目

    vue-cli脚手架 前提:node + npm 安装好 一.介绍 vue-cli: Vue + ESLint + webpack + iview + ES6 Vue:主要框架ESLint:帮助我们检 ...