2021-01-20 圖片壓縮
阿新 • • 發佈:2021-02-03
技術標籤:個人
前言
專案中用到了華為雲的ocr,但是識別速度過慢,問了客服了解到可能有幾個原因
1、圖片連結的話存在網路傳輸問題
2、圖片過大問題
3、伺服器網路頻寬問題
這裡我主要處理2,因為用的是MultipartFile引數,因此考慮先壓縮過後,再將圖片進行ocr。
方案
// 以下方式可以直接壓縮並輸出檔案
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();
<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);
小結
雖然瞭解了谷歌的用法,但是還是hutool用起來更加滋潤,我好了
以後壓縮圖片就hutool走起即可 - -