java图片压缩工具类
生活随笔
收集整理的這篇文章主要介紹了
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图片压缩工具类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: **视频会议设备连接注意事项**
- 下一篇: 免费下载思科CCNP 642-802考试