Java中图片压缩处理

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

整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享。
首先,要压缩的图片格式不能说动态图片,你可以使用bmp、png、gif等,至于压缩质量,可以通过BufferedImage来指定。
在C盘的temp下放置一张图片pic123.jpg,尽量找一个像素高一点的图片,这里我找了一张5616*3744的。

 

package test;
import java.io.*;
import java.util.Date;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.*;
/**
 * 图片压缩处理
 * @author 崔素强
 */
public class ImgCompress {
	private Image img;
	private int width;
	private int height;
	@SuppressWarnings("deprecation")
	public static void main(String[] args) throws Exception {
		System.out.println("开始:" + new Date().toLocaleString());
		ImgCompress imgCom = new ImgCompress("C:\\temp\\pic123.jpg");
		imgCom.resizeFix(400, 400);
		System.out.println("结束:" + new Date().toLocaleString());
	}
	/**
	 * 构造函数
	 */
	public ImgCompress(String fileName) throws IOException {
		File file = new File(fileName);// 读入文件
		img = ImageIO.read(file);      // 构造Image对象
		width = img.getWidth(null);    // 得到源图宽
		height = img.getHeight(null);  // 得到源图长
	}
	/**
	 * 按照宽度还是高度进行压缩
	 * @param w int 最大宽度
	 * @param h int 最大高度
	 */
	public void resizeFix(int w, int h) throws IOException {
		if (width / height > w / h) {
			resizeByWidth(w);
		} else {
			resizeByHeight(h);
		}
	}
	/**
	 * 以宽度为基准,等比例放缩图片
	 * @param w int 新宽度
	 */
	public void resizeByWidth(int w) throws IOException {
		int h = (int) (height * w / width);
		resize(w, h);
	}
	/**
	 * 以高度为基准,等比例缩放图片
	 * @param h int 新高度
	 */
	public void resizeByHeight(int h) throws IOException {
		int w = (int) (width * h / height);
		resize(w, h);
	}
	/**
	 * 强制压缩/放大图片到固定的大小
	 * @param w int 新宽度
	 * @param h int 新高度
	 */
	public void resize(int w, int h) throws IOException {
		// SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢
		BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB ); 
		image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图
		File destFile = new File("C:\\temp\\456.jpg");
		FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流
		// 可以正常实现bmp、png、gif转jpg
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		encoder.encode(image); // JPEG编码
		out.close();
	}
}

 

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

 

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

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

 

解决方法:
在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同步!

【Dify】PPT生成工具应用 本文介绍了一款自动化PPT生成工具,通过智能接口将文本内容高效转化为结构化演示文档。该系统采用三阶段工作流(内容输入、HTTP请求上传、文件输出),无需复杂操作即可生成专业PPT。工具适用于教学课件、产品发布、企业培训等场景,能显著提升内容表达效率,特别适合初学者快速制作演示材料。文章详细说明了核心节点、应用场景及开发资源,为文本到PPT的自动化转换提供了实用解决方案。 阅读详情

相关推荐

VirtualBox创建虚拟机(为安装Ubuntu桌面系统)

Ubuntu的安装非常灵活。但是万变不离其宗,归纳起来,无非就是以下3种:(1)用户可以下载完整的ISO镜像文件,将其转移到各种介质上面,例如DVD或者U盘,然后以该介质引导系统进行安装。(2)用户可以下载一个非常小的网络安装器,利用该安装器引导系统进行在线安装。(3)用户可以将Ubuntu安装到一个U盘中,随身携带。为了便于读者学习,本节将介绍通过完整的ISO镜像文件安装Ubuntu。其他的安装方式将在后面介绍。

夏天又到了的专栏 2687

Java 中如何对图片进行压缩处理

Java 中如何对图片进行压缩处理

跟着飞哥学编程(全栈联盟) 1万+

从原理到实践:详解RGBD相机深度与彩色图像对齐(D2C)算法

本文深入解析了RGBD相机深度与彩色图像对齐(D2C)算法的原理与实现。针对自组装相机中深度图与彩色图不匹配的核心痛点,文章从相机模型、坐标系变换等数学基础讲起,剖析了传统点映射算法的缺陷,并重点介绍了高效的矩形区域映射算法。该算法通过将深度像素视为矩形区域进行映射,有效解决了空洞和遮挡问题,并附有可直接复用的C++代码与优化技巧,为三维重建、机器人视觉等应用奠定坚实基础。

weixin_28363123的博客 241

java轻量级多线程图片压缩

java轻量级多线程图片压缩

Master_Shifu_的博客 1万+

Shopee 虾皮API接口:商品详情采集的实践

随着电商行业的蓬勃发展,数据采集和分析在商业决策中扮演着越来越重要的角色。Shopee作为东南亚领先的电商平台,拥有大量的商品数据。通过Shopee的API接口,我们可以方便地获取商品详情,为数据分析和市场研究提供有力支持。本文将介绍如何使用Shopee API接口采集商品详情,并分享一些实践技巧。提供了丰富的数据接口,包括商品详情、店铺信息、订单数据等。通过API接口,开发者可以轻松地获取Shopee平台上的数据,进行进一步的处理和分析。Shopee API接口:商品详情采集的实践与技巧。

An4480的博客 1882

航空大数据——项目资源汇总及开源(四)

ADS-B项目开源大礼包

cyc头发还挺多的博客 4978

使用Java实现图片大小压缩

文章介绍了如何使用Java实现图片大小压缩,包括从输入流读取图片、压缩图片并通过输出流返回压缩后的图片数据。我们利用Thumbnailator库进行压缩,并创建了一个Spring Boot控制器来提供RESTful接口。

shyの个人笔记 6117

鼎捷T100——二次开发:维护作业添加非实体字段

非实体字段添加

weixin_52342654的博客 1156

Java实现图片压缩

通过Thumbnails压缩图片

走马川行雪的博客 6240

ICLR 2022)ODConv:即插即用的动态卷积 (附代码)

一定程度上讲,ODConv可以视作CondConv的延续,将CondConv中一个维度上的动态特性进行了扩展,同时了考虑了空域、输入通道、输出通道等维度上的动态性,故称之为全维度动态卷积。ODConv是一种动态卷积算法,它的原理是在卷积过程中,根据输入数据的特征动态地调整卷积核的形状和大小,以适应不同的输入数据。具体来说,ODConv通过引入一个可学习的形变模块,根据输入数据的特征动态地调整卷积核的形状和大小,从而提高了卷积神经网络的性能。此外,相比常规卷积,动态卷积的卷积核参数往往是其n倍。

PLANTTHESON的博客 2万+

ArcGIS实验教程——实验二十五:大型商场选址经典案例

本实验基于ArcGIS平台进行商场选址分析,综合考虑道路、居民点、停车场和已有商场四个影响因素。通过缓冲区分析建立各要素的影响范围(道路50米、居民点100米、停车场100米、已有商场500米),采用叠加分析中的相交和擦除运算确定最优选址区域。实验建立了区位评价体系,通过属性赋值(1/-1)和联合运算生成综合评价结果,并实现分级可视化显示。注意事项包括距离参数设置对结果的影响以及正确选择空间分析工具。该流程为商业选址提供了科学的GIS解决方案。

智慧空间实验室 1万+

压缩图片的三种方式(Java)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决.

Archer-23的博客 1万+

【1】Python交叉编译到OpenHarmony标准系统运行(arm32位)

本文介绍如何Python语言如何在OpenHarmony标准系统运行,包括5.0r和4.1r以及4.0r,和未来版本的OpenHarmony版本上。 Python语言在OpenHarmony上使用,需要将Python解释器CPython移植到OpenHarmony标准系统。通过交叉编译的方式。

weixin_58069108的博客 927

Java图片压缩处理

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

binyao02123202的专栏 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

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

yushideaaa的专栏 1079

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【java批量图片压缩处理】

java图片批量压缩

qq_15294055的博客 682

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

妃妃不妃的小博客 1547

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 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

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
上一篇: Spring 编程事物管理
下一篇: Kaptcha 在Web页面生成验证码
阿强仔
博客等级 码龄18年 48粉丝 312原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值