原文http://cuisuqiang.iteye.com/blog/2045855
整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享。
首先,要压缩的图片格式不能说动态图片,你可以使用bmp、png、gif等,至于压缩质量,可以通过BufferedImage来指定。
在C盘的temp下放置一张图片pic123.jpg,尽量找一个像素高一点的图片,这里我找了一张5616*3744的。
- packagetest;
- importjava.io.*;
- importjava.util.Date;
- importjava.awt.*;
- importjava.awt.image.*;
- importjavax.imageio.ImageIO;
- importcom.sun.image.codec.jpeg.*;
- /**
- *图片压缩处理
- *@author崔素强
- */
- publicclassImgCompress{
- privateImageimg;
- privateintwidth;
- privateintheight;
- @SuppressWarnings("deprecation")
- publicstaticvoidmain(String[]args)throwsException{
- System.out.println("开始:"+newDate().toLocaleString());
- ImgCompressimgCom=newImgCompress("C:\\temp\\pic123.jpg");
- imgCom.resizeFix(400,400);
- System.out.println("结束:"+newDate().toLocaleString());
- }
- /**
- *构造函数
- */
- publicImgCompress(StringfileName)throwsIOException{
- Filefile=newFile(fileName);//读入文件
- img=ImageIO.read(file);//构造Image对象
- width=img.getWidth(null);//得到源图宽
- height=img.getHeight(null);//得到源图长
- }
- /**
- *按照宽度还是高度进行压缩
- *@paramwint最大宽度
- *@paramhint最大高度
- */
- publicvoidresizeFix(intw,inth)throwsIOException{
- if(width/height>w/h){
- resizeByWidth(w);
- }else{
- resizeByHeight(h);
- }
- }
- /**
- *以宽度为基准,等比例放缩图片
- *@paramwint新宽度
- */
- publicvoidresizeByWidth(intw)throwsIOException{
- inth=(int)(height*w/width);
- resize(w,h);
- }
- /**
- *以高度为基准,等比例缩放图片
- *@paramhint新高度
- */
- publicvoidresizeByHeight(inth)throwsIOException{
- intw=(int)(width*h/height);
- resize(w,h);
- }
- /**
- *强制压缩/放大图片到固定的大小
- *@paramwint新宽度
- *@paramhint新高度
- */
- publicvoidresize(intw,inth)throwsIOException{
- //SCALE_SMOOTH的缩略算法生成缩略图片的平滑度的优先级比速度高生成的图片质量比较好但速度慢
- BufferedImageimage=newBufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
- image.getGraphics().drawImage(img,0,0,w,h,null);//绘制缩小后的图
- FiledestFile=newFile("C:\\temp\\456.jpg");
- FileOutputStreamout=newFileOutputStream(destFile);//输出到文件流
- //可以正常实现bmp、png、gif转jpg
- JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);
- encoder.encode(image);//JPEG编码
- out.close();
- }
- }
运行后在C盘temp下生成一个465.jpg,像素大小为600*400,像素大小是我指定的。用时也就是一两秒的事情,注意,我这张图片是10M的,压缩后是40.5KB。
一些细节事项可以参考代码中的注释。
要注意的是,你可能想试一试较大图片的处理能力,如果你的JDK没有指定默认内存,那可能会有如下异常,因为内存不够大:
- 开始:2014-4-1416:25:11
- Exceptioninthread"main"java.lang.OutOfMemoryError:Javaheapspace
- atjava.awt.image.DataBufferByte.<init>(DataBufferByte.java:58)
- atjava.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397)
- atjava.awt.image.Raster.createWritableRaster(Raster.java:938)
- atjavax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1169)
- atjavax.imageio.ImageReader.getDestination(ImageReader.java:2879)
- atcom.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:943)
- atcom.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:915)
- atjavax.imageio.ImageIO.read(ImageIO.java:1422)
- atjavax.imageio.ImageIO.read(ImageIO.java:1282)
- attest.ImgCompress.<init>(ImgCompress.java:31)
- attest.ImgCompress.main(ImgCompress.java:21)
解决方法:
在Eclipse里选:Window->Preference->Installed JREs->Edit(选中jre),
在Default VM Arguments里输入-Xms256m -Xmx1024m,表示最小堆内存256M,最大堆1G,然后运行就可以了
相关推荐
在C# Core中进行图片处理是一项常见的任务,其中包括图片压缩和剪切操作。无损压缩和剪切技术在保持原始图像质量的同时,可以减小文件大小或改变图像的形状。以下将详细介绍C# Core中如何实现这些功能。 首先,我们...
Grearo图片压缩工具 功能介绍【必读】: 1 图片批量压缩(30以内,依个人机器以及被压缩图片大小而定); 2 图片限定宽度,等比例压缩; 3 图片限定高度,等比例压缩; 4 图片限定高度,宽度压缩;...
在IT行业中,图片压缩是一项非常重要的技术,尤其是在网络传输、存储和显示图像时。"易语言图片压缩到最小"这个主题涉及到的是如何使用易语言这一编程工具来实现图片的高效压缩,以减小其占用的存储空间。易语言是...
《ImageResizer.exe:一款轻巧实用的图片压缩神器》 在数字时代,我们经常会遇到大量图片需要处理的情况,无论是为了存储空间的节省,还是为了网络传输的便捷,图片压缩都成为了必不可少的操作。今天,我们要介绍的...
在IT行业中,图片压缩是一个非常重要的技术,尤其是在内存管理和移动应用开发中。标题"图片压缩节约内存"直接指向了这个核心目标:通过压缩图片来减少应用程序对内存的占用,从而提高性能并避免内存溢出的问题。这在...
在IT行业中,图片压缩和文件压缩是常见的操作,特别是在存储和传输大量数据时。本文将深入探讨使用C#编程语言实现图片压缩以及多文件压缩成ZIP格式的压缩包的技术细节和自定义设置。 图片压缩主要目标是减小图像...
在Java编程语言中,处理图片压缩是一项常见的任务,特别是在存储、传输或展示大量图像资源时。本主题将深入探讨如何使用Java实现图片压缩,并能够将其调整到任意大小,同时保持图片质量并避免变形。 首先,我们需要...
在IT领域,图片压缩是一项重要的技术,特别是在网络传输、存储和显示方面。"图片压缩到最小.rar"这个压缩包文件的标题和描述直接指向了这一主题。本文将深入探讨图片压缩的基本原理、常见方法以及易语言...
本文实例为大家分享了微信小程序图片压缩的具体代码,供大家参考,具体内容如下 设计思路: 选择图片后调用微信压缩图片接口,压缩后接收压缩图片的临时地址,调用微信储存接口保存图片至本地。 参数: imagesrc:...
在IT领域,图片压缩是一个非常实用的技术,尤其在网页设计、社交媒体分享、存储空间有限的设备上。本文将深入探讨一款被描述为“小巧的图片压缩工具,压缩比例可调”的软件,它允许用户批量处理图片,降低文件大小而...
【蜂鸟图片压缩软件 JPG PNG 压缩】 在数字媒体和互联网领域,图片的大小对网站加载速度和存储空间有着直接影响。为了优化用户体验和节省资源,图片压缩变得至关重要。"蜂鸟图片压缩软件"(Hummingbird)是专为此...
总的来说,VB6图片压缩处理源码可能涵盖了图像读取、压缩算法应用、图像尺寸调整、文件I/O以及用户交互等多个方面,体现了VB6结合外部库进行图像处理的能力。通过理解这些知识点,可以对源码进行深入研究和扩展,以...
HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态...通过理解并运用上述技术,你可以创建一个高效且兼容性强的图片压缩解决方案,确保在微信、Chrome、Firefox等不同环境中都能得到良好的效果。
在本项目中,"pb 图片压缩、解压技术结合XML" 提到了如何使用PB进行图片处理,具体涉及图片的压缩和解压,并结合XML文件进行数据存储。以下是关于这个主题的详细知识点: 1. **图片压缩**:图片压缩通常是为了减小...
本文将深入探讨“前端图片压缩base64”这一主题,以及如何在后台还原这些压缩后的图片。 一、前端图片压缩 前端图片压缩的主要目标是减小图片大小,从而减少HTTP请求的数据量,加快网页加载速度。这通常通过以下两...
在移动端H5应用中,图片压缩上传是一项常见的需求,它涉及到前端图像处理、文件上传以及与服务器的交互。本文将详细讲解如何实现这一功能,主要关注JavaScript开发中的图片展示处理。 首先,我们要理解图片压缩的...
首先,我们来看看使用Java标准库中的`javax.imageio.ImageIO`类进行图片压缩。`ImageIO`类提供了读取、写入和处理图像的功能。以下是一个简单的示例,展示如何读取一个图片文件,然后以较低的质量重新保存,从而达到...
【事业单位图片压缩工具】是一款专为事业单位设计的高效图片压缩软件,它能够处理市面上常见的多种图片格式,如JPEG(JPG)、PNG、BMP、GIF等。该工具的主要功能在于大幅度减小图片的文件大小,例如,一个原本2MB的...
1. 图片压缩:SimpleImage提供了多种压缩算法,可以根据需求调整压缩级别,以平衡图片质量和文件大小。它可以处理JPG、PNG等多种常见格式的图片,有效地减小图片的存储空间和网络传输成本。 2. 图片裁剪:对于需要...
首先,图片压缩是减少上传时间和服务器存储空间的关键步骤。`mui`提供了一种方法来实现这个功能,通常通过`HTML5`的`FileReader`和`canvas`API来读取图片并进行压缩。在选择图片后,`mui`会触发一个事件,允许我们在...