【Thumbnailator】圖片壓縮、水印、格式修改一網打盡

?前言:

????????對于javaweb服務端開發人員,圖片資源的管理總是繞不開的一環。很多網站上都會提供上傳圖片這個功能,而現代數碼設備拍攝出來的都是高清圖片,分辨率很高,占用的空間也很大。物理存儲的問題還算容易解決,但是網絡帶寬太緊張了。一個頁面動則就幾十M,那加載速度,想想也是夠了,所以圖片的壓縮就必不可少了,對于圖片的加工,前后端都可以實現,這里講解一下后端實現圖片加工的工具庫——Thumbnailator


簡介:

????????Thumbnailator 是一個用來生成圖像縮略圖的 Java 類庫,通過很簡單的代碼即可生成圖片縮略圖,也可直接對一整個目錄的圖片生成縮略圖。

????????Thumbnailator 能做什么?

????????Thumbnailator是一款高性能的java縮略圖類庫。 支持的處理操作:圖片縮放,區域裁剪,水印,旋轉,保持比例。


快速入門:

引入依賴:

<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version>
</dependency>

API示例:

圖片壓縮

方式一:等比例壓縮
Thumbnails.of("原圖文件的路徑").scale(0.5) // 壓縮的比例.toFile("壓縮后文件的路徑");
方式二:指定px值的等比例壓縮(不會破壞圖片比例,因此如果px值不成比例會與預期有小差距)
Thumbnails.of("原圖文件的路徑").size(100, 75) // 長寬的px值.toFile("壓縮后文件的路徑"); 
方式三:非等比例壓縮(會破壞圖片比例,即圖片會受指定的比例變型
Thumbnails.of("原圖文件的路徑").scale(1.0, 0.5)  // 長寬的比例,非等比例,會導致圖片變型.toFile("壓縮后文件的路徑");

圖片旋轉

????????注意:這里的圖片旋轉要伴隨著一個圖片的壓縮變量,如果僅僅只是實現圖片旋轉,可以把壓縮比例寫為 1

Thumbnails.of("原圖文件的路徑").scale(0.8) // 等比例縮放的比例.rotate(90) // 旋轉的角度,順時針.toFile("轉換后文件的路徑");
Thumbnails.of(“原圖文件的路徑”).size(40,40) // 等比例縮放的具體長寬px值.rotate(90)  // 順時針旋轉的角度.toFile(“轉換后文件的路徑”);

scale,size 必須有一個有值


加水印?

File image = new File("水印圖片地址");
Thumbnails.of("原圖文件的路徑").scale(0.8)  // 原圖壓縮的比例// Watermark:添加水印 watermark(位置,水印圖,透明度).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(image), 0.5f).toFile("轉換后文件的路徑");

修改文件格式

Thumbnails.of(“原圖文件的路徑”).scale(1f) // 原圖等比例縮放的比例,1f表示不縮放,不能省略.outputFormat(“jpg”) // 轉換后的格式.toFile(“轉換后文件的路徑”);  // 這里要注意哦,路徑最后要寫上“生成的文件名.后綴”

????????outputFormat:設置轉換后圖片格式,之前聽說該屬性設置為png時,scale縮放屬性無效,測試用0.4.8的版本已經能正常縮放了


不改變寬高,壓縮大小?

Thumbnails.of("原圖文件的路徑").scale(1f) // 原圖等比例縮放的比例,1f表示不縮放,不能省略 .outputQuality(0.5f) // 輸出的圖片質量,范圍:0.0~1.0,1為最高質量,大小最大.toFile("壓縮后文件的路徑");

綜合實戰:

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import net.coobird.thumbnailator.name.Rename;
import net.coobird.thumbnailator.resizers.configurations.ScalingMode;
import org.apache.pdfbox.tools.imageio.ImageIOUtil;import javax.imageio.ImageIO;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;/*** @author wzx* @version 1.0* @description 生成縮略圖和水印非常好用,具體幫助文檔 https://github.com/coobird/thumbnailator/wiki/Maven*              縮略圖*              水印*              選擇*              格式轉換* @Create 2023/8/22*/
public class ThumbnailatorDmo {/*** 使用給定的圖片生成指定大小的圖片*/private static void generateFixedSizeImage(){try {Thumbnails.of("data/meinv.jpg").size(80,80).toFile("data/newmeinv.jpg");} catch (IOException e) {System.out.println("原因: " + e.getMessage());}}/*** 對原圖加水印,然后順時針旋轉90度,最后壓縮為80%保存*/private static void generateRotationWatermark(){try {Thumbnails.of("data/2016010208.jpg").size(160,160). // 縮放大小rotate(90). // 順時針旋轉90度watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("data/newmeinv.jpg")),0.5f). //水印位于右下角,半透明outputQuality(0.8). // 圖片壓縮80%質量toFile("data/2016010208_new.jpg");} catch (IOException e) {System.out.println("原因: " + e.getMessage());}}/*** 轉換圖片格式,將流寫入到輸出流*/private static void generateOutputstream(){try(OutputStream outputStream = new FileOutputStream("data/2016010208_outputstream.png")) { //自動關閉流Thumbnails.of("data/2016010208.jpg").size(500,500).outputFormat("png"). // 轉換格式toOutputStream(outputStream); // 寫入輸出流} catch (IOException e) {System.out.println("原因: " + e.getMessage());}}/*** 按比例縮放圖片*/private static void generateScale(){try {Thumbnails.of("data/2016010208.jpg").//scalingMode(ScalingMode.BICUBIC).scale(0.8). // 圖片縮放80%, 不能和size()一起使用outputQuality(0.8). // 圖片質量壓縮80%toFile("data/2016010208_scale.jpg");} catch (IOException e) {System.out.println("原因: " + e.getMessage());}}/*** 生成縮略圖到指定的目錄*/private static void generateThumbnail2Directory(){try {Thumbnails.of("data/2016010208.jpg","data/meinv.jpg").//scalingMode(ScalingMode.BICUBIC).scale(0.8). // 圖片縮放80%, 不能和size()一起使用toFiles(new File("data/new/"), Rename.NO_CHANGE);//指定的目錄一定要存在,否則報錯} catch (IOException e) {System.out.println("原因: " + e.getMessage());}}/*** 將指定目錄下所有圖片生成縮略圖*/private static void generateDirectoryThumbnail(){try {Thumbnails.of(new File("data/new").listFiles()).//scalingMode(ScalingMode.BICUBIC).scale(0.8). // 圖片縮放80%, 不能和size()一起使用toFiles(new File("data/new/"), Rename.SUFFIX_HYPHEN_THUMBNAIL);//指定的目錄一定要存在,否則報錯} catch (IOException e) {System.out.println("原因: " + e.getMessage());}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166029.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166029.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166029.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習---最大似然估計和貝葉斯參數估計

1. 估計 貝葉斯框架下的數據收集&#xff0c;在以下條件下我們可以設計一個可選擇的分類器 : P(wi) (先驗)&#xff1b;P(x | wi) (類條件密度) 但是。我們很少能夠完整的得到這些信息! 從一個傳統的樣本中設計一個分類器&#xff1a; ①先驗估計不成問題 ②對類條件密度…

蘋果企業簽名失敗常見的問題

蘋果企業簽名失敗的常見問題主要有以下幾種&#xff1a; 證書過期或無效&#xff1a;蘋果開發者需要定期更新他們的簽名證書&#xff0c;以確保其有效性。一旦證書過期&#xff0c;相關應用將無法正常工作。證書不匹配&#xff1a;如果使用的證書與應用程序的Bundle ID不匹配&…

WT588F02B-8S語音芯片支持PWM音頻輸出的特征優勢及應用前景

隨著科技的飛速發展&#xff0c;語音芯片作為人機交互的核心組件&#xff0c;在各個領域的應用越來越廣泛。而在這些語音芯片中&#xff0c;支持PWM音頻輸出的特性日益受到關注。本文將探討語音芯片支持PWM音頻輸出的特征優勢以及其在各個領域的應用前景。 一、特征優勢 1、高…

git本地賬戶如何從一臺電腦遷移到另外一臺

為了表述方便&#xff0c;我們此處用舊電腦、新電腦指代。 在新電腦上安裝git 例如&#xff0c;我舊電腦上安裝的git版本是2.33.1版本&#xff0c;新電腦安裝git的版本是2.43.0&#xff0c;這不妨礙遷移。 將git的全局配置文件從舊電腦拷貝到新電腦 Git的全局配置文件&…

“關愛零距離.情暖老人心”主題活動

為提高社區老年人的生活質量&#xff0c;促進鄰里間的互動與友誼&#xff0c;以及弘揚尊老愛幼的社區精神&#xff0c;11月21日山東省濰坊市金陽公益服務中心、重慶市潼南區同悅社會工作服務中心在潼南區桂林街道東風社區共同在潼南區桂林街道東風社區舉辦了“關愛零距離.情暖老…

22款奔馳S400L升級原廠360全景影像 高清環繞 無死角

360全景影像影像系統提升行車時的便利&#xff0c;不管是新手或是老司機都將是一個不錯的配置&#xff0c;無論是在倒車&#xff0c;挪車以及拐彎轉角的時候都能及時關注車輛所處的環境狀況&#xff0c;避免盲區事故發生&#xff0c;提升行車出入安全性。 360全景影像包含&…

自學編程,用好這幾個網站就夠了!

如果你要自學編程&#xff0c;一定要收藏好這7個網站&#xff0c;上面免費的優質教程很多&#xff0c;完全可以省去你上萬塊錢的學費&#xff01; 話不多說&#xff0c;直接上干貨&#xff01; 第一個&#xff0c;W3school 一個主打圖文教程的網站&#xff0c;不管是前端開發…

怎樣將帶表格的圖片批量合并轉換成word表格?

注&#xff1a;本功能適用于V3.66以上版本的金鳴表格文字識別大師 在日常的辦公場景中&#xff0c;我們常常會遇到需要將帶有表格類的圖片識別成excel的需求。我們知道&#xff0c;普通的OCR軟件并不具備識別中文表格的功能&#xff0c;即使有&#xff0c;效果也強差人意&…

JSP:MVC

Web應用 一個好的Web應用&#xff1a; 功能完善 易于實現和維護 易于擴展等 的體系結構 一個Web應用通常分為兩個部分&#xff1a; m 1. 由界面設計人員完成的 表示層 &#xff08;主要做網頁界面設計&#xff09; m 2. 由程序設計人員實現的 行為層 &#xff08;主要完成本…

SELinux零知識學習二十五、SELinux策略語言之類型強制(10)

接前一篇文章:SELinux零知識學習二十四、SELinux策略語言之類型強制(9) 二、SELinux策略語言之類型強制 3. 訪問向量規則 AV規則就是按照對客體類別的訪問許可指定具體含義的規則,SELinux策略語言目前支持四類AV規則: allow:表示允許主體對客體執行允許的操作。neveral…

2015年7月8日 Go生態洞察:Go、開源與社區

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

C#面試題3

1.請解釋一下C#中的并發編程和線程安全性。 并發編程是指在多線程環境下編寫代碼以實現并發執行的能力。C#提供了一些機制來支持并發編程&#xff0c;如線程、任務和并行循環等。線程安全性是指在多線程環境下&#xff0c;代碼能夠正確地處理共享數據并保持一致性。線程安全的代…

基于springboot實現大學生就業服務平臺系統項目【項目源碼】計算機畢業設計

基于springboot實現大學生就業服務平臺系統演示 Java技術 Java是由SUN公司推出&#xff0c;該公司于2010年被oracle公司收購。Java本是印度尼西亞的一個叫做爪洼島的英文名稱&#xff0c;也因此得來java是一杯正冒著熱氣咖啡的標識。Java語言在移動互聯網的大背景下具備了顯著…

企業必看的大數據安全極速傳輸解決方案

在這個大數據時代&#xff0c;企業在享受大數據帶來的便利同時&#xff0c;也面臨著巨大的挑戰&#xff0c;其中最主要的問題就是數據安全方面和傳輸方面&#xff0c;為了更好地滿足企業大數據傳輸的需求&#xff0c;小編將深入分析企業對于大數據傳輸面臨的挑戰和風險以及大數…

【elementui】el-popover在列表里循環使用,取消的doClose無效解決辦法

目錄 一、需求效果二、代碼詳情html方法接口 一、需求效果 在使用elementui的Popover 彈出框時&#xff0c;需求是在table列表里使用&#xff0c;循環出來&#xff0c;無法取消。 二、代碼詳情 html <el-table-column v-if"checkPermission([admin,user:resetPass…

【C++】標準模板庫STL作業(其二)

&#x1f383;個人專欄&#xff1a; &#x1f42c; 算法設計與分析&#xff1a;算法設計與分析_IT閆的博客-CSDN博客 &#x1f433;Java基礎&#xff1a;Java基礎_IT閆的博客-CSDN博客 &#x1f40b;c語言&#xff1a;c語言_IT閆的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

C 語言文件讀寫

C 語言文件讀寫 在本教程中&#xff0c;您將學習如何在C語言中處理文件。您將通過示例學習在C語言中使用fprintf()、fscanf()、fread()、fwrite()、fseek()等處理標準I/O。 文件是計算機存儲設備中用于存儲數據的容器。 為什么需要文件&#xff1f; 當程序終止時&#xff0…

vue2,vue3使用vuex

vuex vue的狀態管理器 1引入vuex npm install vuex2.創建store/index.js文件 在main.js引入 import { createStore } from vuexconst store createStore({state: () > ({})}) export default store3.state 核心, 用于定義數據 state: () > ({count: 0,name: 陸青,age:…

Py之wikipedia-api:wikipedia-api的簡介、安裝、使用方法之詳細攻略

Py之wikipedia-api&#xff1a;wikipedia-api的簡介、安裝、使用方法之詳細攻略 目錄 wikipedia-api的簡介 wikipedia-api的安裝 wikipedia-api的使用方法 1、 創建 Wikipedia并進行查詢 wikipedia-api的簡介 Wikipedia-API是一個易于使用的Python封裝&#xff0c;用于訪…

計算機是如何執行指令的

計算機組成 現在所說的計算機基本上都是馮諾依曼體系的計算機。其核心原理&#xff1a; 馮諾依曼計算的核心思想是將程序指令和數據以二進制形式存儲存儲在同一存儲器中&#xff0c;并使用相同的數據格式和處理方式來處理它們。這種存儲程序的設計理念使得計算機能夠以可編程…