整理文档,搜刮出一个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. php __autoload 在有命名空间的时候失效(使用的局限性)

    如果要使用__autoload方法,则不能再之前使用namespace,    使用命名空间,则至少php5.3不再调用__autoload方法    因此如果需要使用__autoload和命名空间, ...

  2. Java 位域

    Java位域 这个概念是在 Effective Java中了解到的, 可以通过EnumSet来代替位域这种方式表达. 并不是很常见的概念, 因此记录下. 如果在这之前恰好了解过 bitmap这种数据结 ...

  3. Ruby系列文章

    安装Ruby.多版本Ruby共存.Ruby安装慢问题 Ruby语言的一些杂项 Ruby中的常量:引号.%符号和heredoc Ruby中的数值 Ruby字符串(1):String基本用法 Ruby字符 ...

  4. 不懂数据库索引的底层原理?那是因为你心里没点b树

    本文在个人技术博客不同步发布,详情可用力戳 亦可扫描屏幕右侧二维码关注个人公众号,公众号内有个人联系方式,等你来撩...   前几天下班回到家后正在处理一个白天没解决的bug,厕所突然传来对象的声音: ...

  5. ASP.Net Core2.1 秒杀项目一步一步实现CI/CD系列一

    前言:有一段时间没写博客了,那是因为博主菜,需要学习和准备,这不带来了本系列的文章.在这里我把学习的心得分享出来,有些点理解的也不是太到位,希望大佬们能多多给点建议和指导.下半年就把这个系列的文章写完 ...

  6. leadcode的Hot100系列--17. 电话号码的字母组合--回溯的另一种想法的应用

    提交leetcode的时候遇到了问题,一直说访问越界,但仔仔细细检查n多遍,就是检查不出来. 因为我用到了count全局变量,自加一来表明当前数组访问的位置, 后来突然想到,是不是在leetcode在 ...

  7. HDU 1724:Ellipse(自适应辛普森积分)

    题目链接 题意 给出一个椭圆,问一个[l, r] 区间(蓝色区域)的面积是多少. 思路 自适应辛普森积分 具体一些分析如上. 很方便,套上公式就可以用了. 注意 eps 的取值影响了跑的时间,因为决定 ...

  8. php的开始之路

    三大核心:封装,继承,多态 三大核心无处不在,不管是php传统的面向过程化编程,还是后来加入的oop面向对象编程,都一直贯穿整个php的发展进步史. 面向对象,面向接口五大原则:单一职责,封闭-开放, ...

  9. S7-300CPU存储器介绍及存储卡使用

    1. S7 300存储区概述 S7-300 PLC的存储区可以划分为四个区域:装载存储器(Load Memory).工作存储器(Work Memory). 系统存储器(System Memory)和保 ...

  10. Spring Cloud Alibaba | Nacos配置管理

    目录 Spring Cloud Alibaba | Nacos配置管理 1. pom.xml 项目依赖 2. 在 bootstrap.properties 中配置 Nacos server 的地址和应 ...