日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

[Java]图片压缩

發布時間:2025/3/15 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Java]图片压缩 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java中內置的壓縮圖片有兩種方式:

  • 通過Image的getScaledInstance方法將圖片尺寸進行壓縮,它的壓縮策略有:
    SCALE_DEFAULT默認圖像縮放算法
    SCALE_FAST縮放速度優先
    SCALE_SMOOTH圖像平滑度優先
    它的長處是能夠在盡量不影響圖像質量的情況下對圖片進行一定的壓縮,缺點是壓縮的效果有局限性.
  • 使用ImageWriteParam的setCompressionQuality方法設置ImageWrite輸出圖片時生成的圖片質量,它的長處是能夠在不改變圖片尺寸的情況下將圖片的大小壓縮,而且壓縮效率比較高.
  • 下面代碼是將兩者一起使用,達到同一時候控制壓縮圖片尺寸和大小的功能.

    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]图片压缩的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。