Java中图片压缩处理

java实现的PNG和JPG图片压缩_小工具 鉴于网上的很多在线转ico和压缩图片使用起来不方便,故自己制作了一个工具。运行环境:系统:windows 7+依赖:java 21+ 阅读详情

原文http://cuisuqiang.iteye.com/blog/2045855

整理文档,搜刮出一个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.image.*;  
  6. import javax.imageio.ImageIO;  
  7. import com.sun.image.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.         imgCom.resizeFix(400, 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 image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );   
  68.         image.getGraphics().drawImage(img, 0, 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(image); // JPEG编码  
  74.         out.close();  
  75.     }  
  76. }  

 

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

 

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

Java代码   收藏代码
  1. 开始:2014-4-14 16:25:11  
  2. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space  
  3.     at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:58)  
  4.     at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397)  
  5.     at java.awt.image.Raster.createWritableRaster(Raster.java:938)  
  6.     at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1169)  
  7.     at javax.imageio.ImageReader.getDestination(ImageReader.java:2879)  
  8.     at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:943)  
  9.     at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:915)  
  10.     at javax.imageio.ImageIO.read(ImageIO.java:1422)  
  11.     at javax.imageio.ImageIO.read(ImageIO.java:1282)  
  12.     at test.ImgCompress.<init>(ImgCompress.java:31)  
  13.     at test.ImgCompress.main(ImgCompress.java:21)  

 

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


java中图片压缩处理(一) 这几天学习图片缩放技术,搜集了网上的一些资料加上自己的验证,大概整理了两套方案,方便自己学习,也可供大家参考。 一:java原生的图片处理技术      首先,要压缩的图片格式不能说动态图片,你可以使用bmp、png、gif等,至于压缩质量,可以通过BufferedImage来指定。 在d盘的temp下放置一张图片test.jpg,尽量找一个像素高一点的图片,这里我找了一张1920*1080 阅读详情

相关推荐

LightningChart使用教程:创建 JS 散点图

这是对 LightningChart JS XY 图表一些有趣功能的快速技术研究,以及如何使用 LightningChart JS 创建嵌入式散点聊天和添加自定义交互。 此图表将可视化一个 XY 坐标列表以及一个额外的自定义属性,它只是一段文本。这些自定义属性将与 UI 文本元素一起显示,这些元素将与用户的鼠标移动交互。 我们将介绍的突出功能是: 什么是散点图? 如何创建散点图? 如何将自定义属性附加到数据点。 如何创建交互式 UI 文本元素。 最终结果 什么是散点图? 散点图或散点图是..

Augenstern__zyx的博客 1370

Java 图片压缩

压缩思路 通过 BufferedImage.getGraphics().drawImage(Image.getScaledInstance()) 压缩图片。 Image.getScaledInstance(width, height, hints) 的hints为压缩模式,本文采用Image.SCALE_SMOOTH生成缩略图片的平滑度的,优先级比速度高,生成的图片质量比较好但速度慢 源...

DossShi的博客 912

EMC系列EtherCAT总线运动控制器(二):Motion通讯连接、总线配置及诊断

雷赛-EMC系列EtherCAT总线运动控制器(二):Motion通讯连接、总线配置及诊断

weixin_38570076的博客 1883

java图片压缩

手机端App图片上传后最好进行压缩,否则查看时候会出现加载过慢以及流量消耗过大的问题。 图片压缩方法: pom中加上如下配置: <!-- image util --> <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator<...

菱形站位的博客 375

设计四翼无人机(Quadcopter)的自主降落控制算法

为四翼无人机建立动力学模型,包括其姿态(Pitch, Roll, Yaw)和位置(X, Y, Z)的变化。可以使用Aerospace Blockset中的预制模块,或者根据具体需求构建自定义模型。示例:简化动力学模型利用块模拟四翼无人机的基本行为,确保模型能够反映电机输出如何影响姿态和位置变化。

amy_mhd的博客 242

YOLOv13添加WDBB模块,map提升5.34!!,召回率提升6.55,准确率提升3.23

本文提出了一种基于YOLOv13改进的目标检测模型,通过引入WDBB模块显著提升了检测性能。实验结果表明,添加WDBB模块后,mAP提升11.34,召回率提升14.55,准确率提升3.23。文章详细介绍了模型移植方法,包括创建新的yaml配置文件、修改tasks.py和__init__.py文件,以及实现rep_block.py中的核心转换函数。改进后的模型通过深度卷积、通道注意力等模块优化了特征提取能力,同时保持了轻量化的特点。该工作为YOLO系列模型的性能提升提供了新的思路和技术实现。

FJN110的博客 2623

JPG&PNG图片压缩java实现

图片工具类java

零度的博客专栏 9218

ios开发拒绝“玄学”Crash:从循环引用到脏内存,构建你的系统性排查思维模型

你申请了内存,写了数据,这块内存就是脏的。系统无法直接回收它,除非你显式释放,或者系统把它 swap 出去(但在 iOS 上,Compressed Memory 机制虽然能压缩,但不会像桌面系统那样频繁 swap 到磁盘,一旦压缩内存也撑不住,你也得挂)。所以,排查 OOM 的核心心法只有一条:不要问“哪里漏了”,要问“每一刻,留在这个页面上的内存,凭什么必须在这里?一旦内存水位线逼近阈值(不同机型不同,老机器可能 600MB 就危,新机器能抗 1.5GB),系统发个警告。

大模型大数据攻城狮的专栏 724

java png压缩,如何使用Java压缩PNG图像

Hi I would like to know if there is any way in Java to reduce the size of an image (use any kind of compression) that was loaded as a BufferedImage and is going to be saved as an PNG.Maybe some sort o...

weixin_28940363的博客 814

Vue - 萤石云监控 ezuikit 视频实例销毁方案,解决使用stop方法无法销毁EZUIKit实例或销毁后依然占用内存并且监控画面依然有声音问题(解决页面多个监控摄像头画面同时播放,翻页或关闭页

vue2,vue3,萤石,监控摄像头,萤石云销毁视频实例,退出页面销毁,stop销毁原视频流,占用内存怎么办,销毁后视频依旧在后台播放有声音,销毁视频播放器,页面上有多个视频画面怎么销毁某一个,stop方法不生效怎么办,浏览器非常卡,dom销毁,ezuikit-js萤石云播放器Vue中使用beforeDestory销毁播放器实例,调用萤石云ezuikit-js的视频对象销毁,vue使用萤石云监控视频录像回放,不销毁实例会出现离开页面后依旧有监控声音并且占内存问题,不好使,页面崩了,崩溃,视频监控太多,没有用

🏆 前端领域优质创作者 1万+

可食用野生植物检测实战:基于YOLOv11的智能识别系统全流程指南

本文介绍了一种基于YOLOv11的可食用野生植物智能识别系统。该系统通过深度学习技术,能在0.2秒内精准识别植物是否可食用,准确率高达92%。文章详细阐述了从数据采集、标注到模型训练、验证的全流程,并开发了用户友好的Tkinter交互界面。该系统解决了户外探险和植物研究中植物识别的痛点,具有高精度、实时性和强泛化能力的特点,为户外安全提供了智能化解决方案。

FJN110的博客 164

Java图片压缩处理

过去做的项目都是针对企业级应用,第一次开发新闻版块图片上传的功能,需要解决用户上传图片后,按照用户规定的尺寸大小或者按照图片比例,对图片进行压缩。     自己试写的工具类,写的时候考虑了几个关键点:     1、图片格式     JAVA的API很好,com.sun.image.codec.jpeg.JPEGCodec和com.sun.image.codec.jpeg.JPEG

binyao02123202的专栏 2万+

网络分析工具Wireshark系列专栏:01-专栏导读

随着人工智能技术的普及,越来越多的博主开始利用AI进行内容创作,导致优快云等平台上充斥着大量低质量的洗稿文章,严重影响了技术软文的质量和可信度。为了应对这一现象,提升技术内容的质量,瑞哥决定推出系列技术专栏,为大家带来系统、深入且高质量的技术学习资源。这些专栏将帮助读者从入门到精通,特别适合习惯通过文档学习的技术爱好者。作为首个专栏,我们将聚焦于Wireshark——一款广受欢迎的网络协议分析工具。根据优快云后台的反馈,许多读者表示Wireshark是他们欠缺的一项技能。因此,本专栏将通过精心设计的课程

网络技术联盟站 359

java服务端对图片压缩的处理

过去做的项目都是针对企业级应用,第一次开发新闻版块图片上传的功能,需要解决用户上传图片后,按照用户规定的尺寸大小或者按照图片比例,对图片进行压缩。     自己试写的工具类,写的时候考虑了几个关键点:     1、图片格式 /** * 缩略图实现,将图片(jpg、bmp、png、gif等等)真实的变成想要的大小 */ package com.joewalker.test;

yushideaaa的专栏 1079

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java 处理图片-压缩本地图片及远程图片,按照BASE64格式输出

Java 处理图片-压缩本地图片及远程图片,按照BASE64格式输出

妃妃不妃的小博客 1547

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【java批量图片压缩处理】

java图片批量压缩

qq_15294055的博客 682

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java按比例压缩图片的源代码,用java如何把图片处理到指定大小

用java如何把图片处理到指定大小前言:朋友在做图片切割的时候遇到一个问题:如何用java如何把图片处理到指定大小?切割程序如下: public void cut(String srcImageFile,FileOutputStream fileout, int w, int h, int x1, int y1, int sw, int sh) { // TODO Auto-gener

Defonds 的专栏 1万+

java处理压缩图片

用到的包: java.awt.image.BufferedImage java.awt.Graphics2D java.io.FileOutputStream com.sun.image.codec.jpeg.JPEGCodec com.sun.image.codec.jpeg.JPEGImageEncoder java.awt.AlphaComposite java.awt.G

hezhoujun的专栏 4809

java 图片压缩 base64_Java图片处理,压缩,旋转,Base64转码

package com.zsx.servlets;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import com.drew.imaging.ImageMetadataReader;import com.drew.metadata.Directory;import com.drew.meta...

weixin_31994237的博客 970

图片压缩到指定大小Java,java按比例压缩图片的源代码,用java如何把图片处理到指定大小...

用java如何把图片处理到指定大小前言:朋友在做图片切割的时候遇到一个问题:如何用java如何把图片处理到指定大小?切割程序如下:public void cut(String srcImageFile,FileOutputStream fileout, int w, int h, int x1,int y1, int sw, int sh) {// TODO Auto-generated meth...

weixin_36285230的博客 425

java按比例压缩图片的源代码 用java如何把图片处理到指定大小

java按比例压缩图片的源代码 用java如何把图片处理到指定大小

hgguhff的博客 871

java压缩图片处理

转载自http://cuisuqiang.iteye.com/blog/2045855 package test;  import java.io.*;  import java.util.Date;  import java.awt.*;  import java.awt.image.*;  import javax.imageio.ImageIO;  import com.s

abcdefpm的博客 385

Java图片上传压缩处理

import java.awt.Image;    import java.awt.image.BufferedImage;    import java.io.File;    import java.io.FileNotFoundException; import java.io.FileOutputStream;    import java.io.IOException;        i

LiSped的专栏 844

java处理图片之图片压缩工具类

import org.apache.commons.lang.StringUtils; import sun.misc.BASE64Encoder; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; impor.

AdolfQiu的博客 336
上一篇: OpenStack中Keystone的基本概念理解
下一篇: 云计算的认识
天魂地煞
博客等级 码龄15年 18粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值