整理文档,搜刮出一个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. 一文秒懂CPU使用率

    目录 CPU:Cores, and Hyper-Threading  超线程(Hyper-Threading ) 多核(multi-cores) CPU使用率计算 CPU使用率测试 如何计算CPU使用 ...

  2. 基于List数组转换成tree对象

    package com.shjysoft.yunxi.sync.webservice; import java.util.ArrayList;import java.util.Date;import ...

  3. 解读TIME_WAIT--你在网上看到的大多数帖子可能都是错误的

    由于TCP协议整个机制也非常复杂我只能尽可能的在某一条线上来说,不可能面面俱到,如果有疏漏或者对于内容有异议可以留言.谢谢大家. 查看服务器上各个状态的统计数量: netstat -ant | awk ...

  4. vue-cli初始化项目

    vue init webpack cnpm install npm run dev   初始化项目 我们用vue init命令来初始化项目,具体看一下这条命令的使用方法. vue init <t ...

  5. 借助URLOS快速安装WordPress

    ### 简介 WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统.WordPress具有插件架构和模板系统.截至2018年4月,排名前1000万的网站超过30.6%使 ...

  6. js生成动态树状结构及排序

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. BZOJ 2435:[Noi2011]道路修建(树型DP)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2435 题意:中文题意. 思路:很简单的树形DP,sz记录儿子有多少个和cur记录走的哪条弧,然后直接 ...

  8. 获取当前时间的MySql时间函数

    mysql> select current_timestamp(); +---------------------+ | current_timestamp() | +------------- ...

  9. 删除git中缓存的用户名和密码

    我们使用Git命令去clone Gitlab仓库的代码时,第一次弹框提示输入账号密码的时候输错了,然后后面就一直拒绝,不再重复提示输入账号密码,怎么破? git报错信息 运行一下命令缓存输入的用户名和 ...

  10. C#跟Lua如何超高性能传递数据

    前言 在UWA学堂上线那天,我买了招文勇这篇Lua交互的课程,19块还算值,但是前段时间太忙,一直没空研究,他的demo是基于xlua的,今天终于花了大半天时间在tolua下跑起来了,记录一下我的理解 ...