[Java]图片压缩
生活随笔
收集整理的這篇文章主要介紹了
[Java]图片压缩
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java中內置的壓縮圖片有兩種方式:
| SCALE_DEFAULT | 默認圖像縮放算法 |
| SCALE_FAST | 縮放速度優先 |
| SCALE_SMOOTH | 圖像平滑度優先 |
下面代碼是將兩者一起使用,達到同一時候控制壓縮圖片尺寸和大小的功能.
package test;import java.awt.Image; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.util.Iterator;import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageTypeSpecifier; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream;public class CompressPicUtil {public Image CmopressPic(Image image)throws Exception {int newWidth;int newHeight;// 指定生成圖寬高if (image.getWidth(null) > 1024) { //這里能夠自己指定縮放的條件double rate = (double)image.getWidth(null)/1024;newWidth = 1024;newHeight = (int)(image.getHeight(null)/rate);} else {newWidth = image.getWidth(null);newHeight = image.getHeight(null);}// BufferedImage通過縮放進行壓縮 壓縮策略為Image.SCALE_FAST 速度優先BufferedImage buffer = new BufferedImage(newWidth, newHeight,BufferedImage.TYPE_INT_BGR);buffer.getGraphics().drawImage(image.getScaledInstance(newWidth, newHeight,Image.SCALE_FAST), 0, 0, null);// 獲得一個ImageWriter輸出流ImageWriter writer = null;ImageTypeSpecifier type = ImageTypeSpecifier.createFromRenderedImage(buffer);Iterator iter = ImageIO.getImageWriters(type, "jpg");if (iter.hasNext()) {writer = (ImageWriter) iter.next();}if (writer == null) {return null;}IIOImage iioImage = new IIOImage(buffer, null, null);// 指定壓縮方式 壓縮程度 色彩模式ImageWriteParam param = writer.getDefaultWriteParam();param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);param.setCompressionQuality(0.4F); //這里能夠指定壓縮的程度 0-1.0ColorModel colorModel = ColorModel.getRGBdefault();param.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel, colorModel .createCompatibleSampleModel(16, 16))); // 將緩存中的圖片依照指定的配置輸出到字節數組中ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();ImageOutputStream outputStream = ImageIO.createImageOutputStream(byteArrayOutputStream);writer.setOutput(outputStream);writer.write(null, iioImage, param);// 從字節數組中讀取圖片ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());Image smallImage = ImageIO.read(byteArrayInputStream);return smallImage;}}文件1 ---- 壓縮前大小 3378KB 壓縮后大小 44KB 壓縮時間 639 ms 圖片寬度 1024 圖片高度 640
文件2 ---- 壓縮前大小 2240KB 壓縮后大小 60KB 壓縮時間 295 ms 圖片寬度 1024 圖片高度 640
文件3 ---- 壓縮前大小 1161KB 壓縮后大小 37KB 壓縮時間 224 ms 圖片寬度 1024 圖片高度 640
文件4 ---- 壓縮前大小 1309KB 壓縮后大小 50KB 壓縮時間 194 ms 圖片寬度 1024 圖片高度 576
文件5 ---- 壓縮前大小 872KB ? 壓縮后大小 26KB 壓縮時間 223 ms 圖片寬度 1024 圖片高度 576
轉載于:https://www.cnblogs.com/jzdwajue/p/7126833.html
總結
以上是生活随笔為你收集整理的[Java]图片压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android实例-ImageList与
- 下一篇: C++中友元