介绍
这篇文章将为大家详细讲解有关java如何实现压缩图片,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
首先,要压缩的图片格式不能说动态图片,你可以使用bmp、png、gif等,至于压缩质量,可以通过BufferedImage来指定。
在C盘的温度下放置一张图片pic123.jpg,尽量找一个像素高一点的图片,这里我找了一张5616 * 3744的。
包测试; 进口. io . *; 进口java.util.Date; 进口java.awt。*; 进口java.awt.p_w_picpath。*; 进口javax.p_w_picpathio.ImageIO; 进口com.sun.p_w_picpath.codec.jpeg。*;/* * *图片压缩处理 * @author崔素强 */公开课ImgCompress { 私人形象img; 私人int宽度; 私人int高度; @SuppressWarnings (“deprecation") 公共静态void main (String [] args){抛出异常 System.out.println(“开始:“;+新日期().toLocaleString ()); ImgCompress imgCom=new ImgCompress (“C: \ temp \ pic123.jpg"); imgCom。resizeFix (400、400); System.out.println(“结束:“;+新日期().toLocaleString ()); }/* * *构造函数 */公共ImgCompress(字符串文件名)抛出IOException { 文件文件=新文件(文件名);//读入文件 img=ImageIO.read(文件);//构造形象对象 宽度=img.getWidth(空);//得到源图宽 身高=img.getHeight(空);//得到源图长 }/* * *按照宽度还是高度进行压缩 * @param w int最大宽度 * @param h int最大高度 */公共空间resizeFix (int, int h)抛出IOException { 如果(宽/高的在w/h) { resizeByWidth (w); 其他}{ resizeByHeight (h); } }/* * *以宽度为基准,等比例放缩图片 * @param w int新宽度 */公共空间resizeByWidth (int w)抛出IOException { int h=(int)(高度* w/宽度); 调整(w h); }/* * *以高度为基准,等比例缩放图片 * @param h int新高度 */公共空间resizeByHeight (int h)抛出IOException { int w=(int)(宽* h/高); 调整(w h); }/* * *强制压缩/放大图片到固定的大小 * @param w int新宽度 * @param h int新高度 */公共空间大小(int, int h)抛出IOException {//SCALE_SMOOTH的缩略算法生成缩略图片的平滑度的优先级比速度高生成的图片质量比较好但速度慢 BufferedImage p_w_picpath=new BufferedImage (w h BufferedImage。TYPE_INT_RGB); p_w_picpath.getGraphics ()。drawImage (img 0 0 w h, null);//绘制缩小后的图 文件destFile=新文件(“C: \ temp \ 456. jpg"); FileOutputStream=新FileOutputStream (destFile);//输出到文件流//可以正常实现bmp、png、gif转jpg JPEGImageEncoder编码器=JPEGCodec.createJPEGEncoder(出); encoder.encode (p_w_picpath);//JPEG编码 out.close (); } }
运行后在C盘临时下生成一个465. jpg,像素大小为600 * 400,像素大小是我指定的。用时也就是一两秒的事情,注意,我这张图片是10米的,压缩后是40.5 kb。
一些细节事项可以参考代码中的注释。
要注意的是,你可能想试一试较大图片的处理能力,如果你的JDK没有指定默认内存,那可能会有如下异常,因为内存不够大:
异常的线程“main". lang。OutOfMemoryError: Java堆空间 在java.awt.p_w_picpath.DataBufferByte灵活;init> (DataBufferByte.java: 58) java.awt.p_w_picpath.ComponentSampleModel.createDataBuffer (ComponentSampleModel.java: 397) java.awt.p_w_picpath.Raster.createWritableRaster (Raster.java: 938) javax.p_w_picpathio.ImageTypeSpecifier.createBufferedImage (ImageTypeSpecifier.java: 1169) javax.p_w_picpathio.ImageReader.getDestination (ImageReader.java: 2879) com.sun.p_w_picpathio.plugins.jpeg.JPEGImageReader.readInternal (JPEGImageReader.java: 943) com.sun.p_w_picpathio.plugins.jpeg.JPEGImageReader.read (JPEGImageReader.java: 915) javax.p_w_picpathio.ImageIO.read (ImageIO.java: 1422) javax.p_w_picpathio.ImageIO.read (ImageIO.java: 1282) 在test.ImgCompress灵活;init> (ImgCompress.java: 31) test.ImgCompress.main (ImgCompress.java: 21)
关于java如何实现压缩图片就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。