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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java图片压缩工具类

發布時間:2023/12/8 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java图片压缩工具类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java圖片壓縮工具類

PicCompressUtil.java

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths;import org.slf4j.Logger; import org.slf4j.LoggerFactory;import net.coobird.thumbnailator.Thumbnails;/*** @author Gavin.luo* @title: PicUtils* @projectName MyData* @description:* @date 2021/7/20 17:30*/ public class PicCompressUtil {//以下是常量,按照阿里代碼開發規范,不允許代碼中出現魔法值private static final Logger logger = LoggerFactory.getLogger(PicCompressUtil.class);private static final Integer ZERO = 0;private static final Integer ONE_ZERO_TWO_FOUR = 1024;private static final Integer NINE_ZERO_ZERO = 900;private static final Integer THREE_TWO_SEVEN_FIVE = 3275;private static final Integer TWO_ZERO_FOUR_SEVEN = 2047;private static final Double ZERO_EIGHT_FIVE = 0.85;private static final Double ZERO_SIX = 0.6;private static final Double ZERO_FOUR_FOUR = 0.44;private static final Double ZERO_FOUR = 0.4;public static void main(String[] args) throws IOException {byte[] bytes = Files.readAllBytes(Paths.get("C:\\Users\\admin\\Pictures\\qinghua\\hao\\aaa.jpg"));byte[] compressPicForScale = compressPicForScale(bytes, 1024*2);Files.write(Paths.get("C:\\Users\\admin\\Pictures\\qinghua\\hao\\222.JPG"), compressPicForScale);System.out.println("hao");}/*** 根據指定大小壓縮圖片** @param imageBytes 源圖片字節數組* @param desFileSize 指定圖片大小,單位kb* @return 壓縮質量后的圖片字節數組*/public static byte[] compressPicForScale(byte[] imageBytes, long desFileSize) {if (imageBytes == null || imageBytes.length <= ZERO || imageBytes.length < desFileSize * ONE_ZERO_TWO_FOUR) {return imageBytes;}long srcSize = imageBytes.length;double accuracy = getAccuracy(srcSize / ONE_ZERO_TWO_FOUR);try {while (imageBytes.length > desFileSize * ONE_ZERO_TWO_FOUR) {ByteArrayInputStream inputStream = new ByteArrayInputStream(imageBytes);ByteArrayOutputStream outputStream = new ByteArrayOutputStream(imageBytes.length);Thumbnails.of(inputStream).scale(accuracy).outputQuality(accuracy).toOutputStream(outputStream);imageBytes = outputStream.toByteArray();}logger.info("圖片原大小={}kb | 壓縮后大小={}kb",srcSize / ONE_ZERO_TWO_FOUR, imageBytes.length / ONE_ZERO_TWO_FOUR);} catch (Exception e) {logger.error("【圖片壓縮】msg=圖片壓縮失敗!", e);}return imageBytes;}/*** 自動調節精度(經驗數值)** @param size 源圖片大小* @return 圖片壓縮質量比*/private static double getAccuracy(long size) {double accuracy;if (size < NINE_ZERO_ZERO) {accuracy = ZERO_EIGHT_FIVE;} else if (size < TWO_ZERO_FOUR_SEVEN) {accuracy = ZERO_SIX;} else if (size < THREE_TWO_SEVEN_FIVE) {accuracy = ZERO_FOUR_FOUR;} else {accuracy = ZERO_FOUR;}return accuracy;} }

總結

以上是生活随笔為你收集整理的java图片压缩工具类的全部內容,希望文章能夠幫你解決所遇到的問題。

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