整理文档,搜刮出一个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. Codeforces Round #564 (Div. 2)B

    B. Nauuo and Chess 题目链接:http://codeforces.com/contest/1173/problem/B 题目 Nauuo is a girl who loves pl ...

  2. CSS3常用选择器

    一.基本选择器 子元素选择器 概念:子元素选择器只能选择某元素的子元素语法格式:父元素 > 子元素 (Father > Children)兼容性:IE8+.FireFox.Chrome.S ...

  3. Excel导出打印失败报错 (eg HSSF instead of XSSF)

    错误信息: java.lang.RuntimeException: org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException: ...

  4. decimal.ToString()问题

    decimal dt = 1.00M;            decimal dt1 = 1M;                         bool d = dt == dt1;         ...

  5. HDU 3061:Battle(最大权闭合图)

    http://acm.hdu.edu.cn/showproblem.php?pid=3061 题意:中文题意. 思路:和上一题神似啊,比上一题还简单,重新看了遍论文让我对这个理解更加深了. 闭合图:如 ...

  6. 使用JavaScript实现量化策略并发执行——封装Go函数

    在实现量化策略时,很多情况下,并发执行可以降低延时提升效率.以对冲机器人为例,需要获取两个币的深度,顺序执行的代码如下: 请求一次rest API存在延时,假设是100ms,那么两次获取深度的时间实际 ...

  7. k8s学习 - API

    k8s学习 - API 之前对k8s并没有很深入的了解,最近想把手头一个项目全部放到k8s上,以方便部署,需要研究.这里记录一下自己研究过程中头脑中的理解. k8s 和 docker 首先,需要先理解 ...

  8. 【无线安全实践入门】网络扫描和ARP欺骗

    文中可能存在错误操作或错误理解,望大家不吝指正. 同时也希望可以帮助到想要学习接触此方面.或兴趣使然的你,让你有个大概的印象. !阅前须知! 本文是基于我几年前的一本笔记本,上面记录了我学习网络基础时 ...

  9. Linux 终端连接工具 XShell v6.0.01 企业便携版

    NetSarang Xshell – 知名终端连接工具,非常强大的SSH远程终端客户端 ,非常好用的SSH终端管理器.Xshell功能超级强大,性能非常优秀,其特色功能支持多标签会话管理主机,支持远程 ...

  10. 基于go语言结合微信小程序开发的微商城系统

    最近在慕课网上录制了一门<Golang微信小程序微商城系统原型>,这门免费课程特别适合在校大学生或者刚毕业的大学生,go语言初学者以及想要从事微商城开发项目入门的小伙伴们来学习.在课程当中 ...