1. 程式人生 > 其它 >2021-01-20 圖片壓縮

2021-01-20 圖片壓縮

技術標籤:個人

前言

專案中用到了華為雲的ocr,但是識別速度過慢,問了客服了解到可能有幾個原因
	1、圖片連結的話存在網路傳輸問題
	2、圖片過大問題
	3、伺服器網路頻寬問題

這裡我主要處理2,因為用的是MultipartFile引數,因此考慮先壓縮過後,再將圖片進行ocr。

方案

  • hutool:發現hutool的工具真是夠GB用了
//	以下方式可以直接壓縮並輸出檔案
ImgUtil.compress(new File("原圖片"), new File("輸出圖片"), 0.5F);

//	但由於我不需要輸出檔案,且引數只能獲取輸入流,因此點進去原始碼看一波

在這裡插入圖片描述
在這裡插入圖片描述

//	因此使用流引數的from方法,且我們最終需要的是位元組陣列,因此可以寫入一個ByteArrayOutputStream中,再通過toByteArray方法獲取
ByteArrayOutputStream out = new ByteArrayOutputStream();
Img.from(img.getInputStream()).setQuality(0.1).write(out);
byte[] bytes = out.toByteArray();

  • 谷歌的Thumbnailator

Github

<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.13</version>
</dependency>
File org = new File("原圖片");
//	寫到新檔案
Thumbnails.of(org).scale(1).outputQuality(0.05).toOutputStream(new FileOutputStream("新圖片"));
//	以下是位元組陣列的獲取方式
BufferedImage bufferedImage = Thumbnails.of(org).scale(1).outputQuality(0.1).asBufferedImage();
ByteArrayOutputStream out = new ByteArrayOutputStream
(); try { ImageIO.write(bufferedImage, "jpg", out); } catch (IOException e) { e.printStackTrace(); } byte[] bytes = out.toByteArray(); System.out.println(bytes.length);

BufferedImage 轉 byte陣列


小結

雖然瞭解了谷歌的用法,但是還是hutool用起來更加滋潤,我好了
以後壓縮圖片就hutool走起即可 - -