最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用Thumbnailator實現(xiàn)圖片處理功能

 更新時間:2024年07月16日 08:24:20   作者:shy好好學習  
Thumbnailator是一個簡單且功能強大的Java庫,用于生成縮略圖和執(zhí)行其他圖片處理任務,在這篇博客中,我們將介紹如何使用Thumbnailator進行圖片的縮放、裁剪、旋轉等操作,需要的朋友可以參考下

使用Thumbnailator進行圖片處理

Thumbnailator是一個簡單且功能強大的Java庫,用于生成縮略圖和執(zhí)行其他圖片處理任務。在這篇博客中,我們將介紹如何使用Thumbnailator進行圖片的縮放、裁剪、旋轉等操作,并通過一些代碼示例來展示其強大功能。

1. 引入依賴

首先,在你的項目中添加Thumbnailator的依賴。以Maven項目為例,可以在pom.xml中添加以下依賴:

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

2. 基本使用

2.1 縮放圖片

縮放圖片是Thumbnailator的基本功能之一。以下代碼演示了如何將圖片縮放到指定的大小:

import net.coobird.thumbnailator.Thumbnails;

import java.io.File;
import java.io.IOException;

public class ImageResizer {
    public static void main(String[] args) {
        try {
            Thumbnails.of("input.jpg")
                      .size(200, 300)
                      .toFile("output.jpg");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上述代碼中,Thumbnails.of("input.jpg")加載了源圖片,size(200, 300)指定了目標圖片的寬度和高度,toFile("output.jpg")則將處理后的圖片保存到文件。

2.2 保持寬高比

有時我們希望縮放圖片但保持其寬高比。這可以通過scale方法實現(xiàn):

import net.coobird.thumbnailator.Thumbnails;

import java.io.File;
import java.io.IOException;

public class ImageResizer {
    public static void main(String[] args) {
        try {
            Thumbnails.of("input.jpg")
                      .scale(0.5)
                      .toFile("output.jpg");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代碼將圖片縮放到原始大小的50%。

2.3 裁剪圖片

Thumbnailator也支持裁剪圖片。以下代碼演示了如何裁剪圖片的中央?yún)^(qū)域:

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

import java.io.File;
import java.io.IOException;

public class ImageCropper {
    public static void main(String[] args) {
        try {
            Thumbnails.of("input.jpg")
                      .sourceRegion(Positions.CENTER, 200, 200)
                      .size(200, 200)
                      .toFile("output.jpg");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

sourceRegion(Positions.CENTER, 200, 200)方法指定從圖片中央裁剪一個200x200的區(qū)域。

2.4 旋轉圖片

我們還可以使用Thumbnailator旋轉圖片。以下代碼演示了如何將圖片順時針旋轉90度:

import net.coobird.thumbnailator.Thumbnails;

import java.io.File;
import java.io.IOException;

public class ImageRotator {
    public static void main(String[] args) {
        try {
            Thumbnails.of("input.jpg")
                      .rotate(90)
                      .toFile("output.jpg");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

rotate(90)方法將圖片順時針旋轉90度。

3. 高級使用

3.1 批量處理

Thumbnailator還支持批量處理圖片。以下代碼演示了如何將一個目錄中的所有圖片縮放到指定大小:

import net.coobird.thumbnailator.Thumbnails;

import java.io.File;
import java.io.IOException;

public class BatchImageResizer {
    public static void main(String[] args) {
        try {
            Thumbnails.of(new File("inputDir").listFiles())
                      .size(200, 300)
                      .toFiles(Rename.PREFIX_DOT_THUMBNAIL);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代碼將inputDir目錄中的所有圖片縮放到200x300,并在文件名前添加.thumbnail前綴。

3.2 轉換圖片格式

Thumbnailator也可以用于轉換圖片格式。以下代碼演示了如何將JPEG圖片轉換為PNG格式:

import net.coobird.thumbnailator.Thumbnails;

import java.io.File;
import java.io.IOException;

public class ImageFormatConverter {
    public static void main(String[] args) {
        try {
            Thumbnails.of("input.jpg")
                      .size(200, 300)
                      .outputFormat("png")
                      .toFile("output.png");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

outputFormat("png")方法指定輸出圖片的格式為PNG。

3.3 添加水印

使用Thumbnailator可以輕松地在圖片上添加水印。以下代碼演示了如何在圖片右下角添加一個水印:

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import net.coobird.thumbnailator.filters.Watermark;

import java.awt.*;
import java.io.File;
import java.io.IOException;

public class ImageWatermarker {
    public static void main(String[] args) {
        try {
            Thumbnails.of("input.jpg")
                      .size(800, 600)
                      .watermark(Positions.BOTTOM_RIGHT, 
                                 ImageIO.read(new File("watermark.png")), 
                                 0.5f)
                      .toFile("output.jpg");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

watermark(Positions.BOTTOM_RIGHT, watermarkImage, 0.5f)方法指定了水印的位置、圖片和透明度。

3.4 調整圖片質量

可以通過Thumbnailator調整輸出圖片的質量,特別是在生成JPEG格式圖片時:

import net.coobird.thumbnailator.Thumbnails;

import java.io.File;
import java.io.IOException;

public class ImageQualityAdjuster {
    public static void main(String[] args) {
        try {
            Thumbnails.of("input.jpg")
                      .size(800, 600)
                      .outputQuality(0.8)
                      .toFile("output.jpg");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

outputQuality(0.8)方法將輸出圖片的質量設置為80%。

3.5 處理透明度

Thumbnailator也可以處理帶有透明度的圖片,如PNG格式圖片:

import net.coobird.thumbnailator.Thumbnails;

import java.io.File;
import java.io.IOException;

public class TransparentImageProcessor {
    public static void main(String[] args) {
        try {
            Thumbnails.of("input.png")
                      .size(800, 600)
                      .outputFormat("png")
                      .toFile("output.png");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.6 鏈式操作

Thumbnailator允許鏈式操作,可以在一次操作中完成多種圖片處理任務:

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

import java.io.File;
import java.io.IOException;

public class ChainOperations {
    public static void main(String[] args) {
        try {
            Thumbnails.of("input.jpg")
                      .size(800, 600)
                      .rotate(45)
                      .watermark(Positions.BOTTOM_RIGHT, 
                                 ImageIO.read(new File("watermark.png")), 
                                 0.5f)
                      .outputQuality(0.8)
                      .toFile("output.jpg");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代碼展示了如何在一次操作中完成圖片的縮放、旋轉、添加水印和調整質量。

3.7 保存到輸出流

Thumbnailator不僅可以將處理后的圖片保存到文件,還可以保存到輸出流中,比如字節(jié)數(shù)組輸出流:

import net.coobird.thumbnailator.Thumbnails;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class OutputStreamExample {
    public static void main(String[] args) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            Thumbnails.of("input.jpg")
                      .size(800, 600)
                      .toOutputStream(baos);
            byte[] imageBytes = baos.toByteArray();
            // 現(xiàn)在可以使用imageBytes進行其他處理
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.8 讀取自輸入流

同樣地,Thumbnailator也可以從輸入流中讀取圖片:

import net.coobird.thumbnailator.Thumbnails;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class InputStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("input.jpg");
             ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
             
            Thumbnails.of(fis)
                      .size(800, 600)
                      .toOutputStream(baos);
            byte[] imageBytes = baos.toByteArray();
            // 現(xiàn)在可以使用imageBytes進行其他處理
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.9 壓縮圖片

通過調整圖片的輸出質量,可以實現(xiàn)壓縮圖片的目的。以下代碼演示了如何將JPEG圖片壓縮到指定的質量水平:

import net.coobird.thumbnailator.Thumbnails;

import java.io.File;
import java.io.IOException;

public class ImageCompressor {
    public static void main(String[] args) {
        try {
            Thumbnails.of("input.jpg")
                      .size(800, 600)
                      .outputQuality(0.5)
                      .toFile("compressed_output.jpg");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上面的代碼中,outputQuality(0.5)將輸出圖片的質量設置為50%。這個參數(shù)的取值范圍是0到1,值越低,壓縮率越高,文件越小,但質量也會越低。

3.10 限制文件大小進行壓縮

通過調整圖片的尺寸和質量,可以嘗試將圖片壓縮到接近某個目標文件大小。下面是一個示例,通過迭代調整圖片質量來接近目標文件大小:

import net.coobird.thumbnailator.Thumbnails;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileSizeCompressor {
    public static void main(String[] args) {
        try {
            String inputFilePath = "input.jpg";
            String outputFilePath = "compressed_output.jpg";
            long targetFileSize = 100 * 1024; // 目標文件大小為100KB
            compressImage(inputFilePath, outputFilePath, targetFileSize);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void compressImage(String inputFilePath, String outputFilePath, long targetFileSize) throws IOException {
        float quality = 1.0f;
        byte[] imageBytes;

        do {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            Thumbnails.of(inputFilePath)
                      .size(800, 600)
                      .outputQuality(quality)
                      .toOutputStream(baos);
            imageBytes = baos.toByteArray();
            quality -= 0.1f;
        } while (imageBytes.length > targetFileSize && quality > 0);

        FileOutputStream fos = new FileOutputStream(outputFilePath);
        fos.write(imageBytes);
        fos.close();
    }
}

3.11 壓縮并保持透明度

對于PNG等支持透明度的圖片,可以在壓縮時保持透明度:

import net.coobird.thumbnailator.Thumbnails;

import java.io.File;
import java.io.IOException;

public class TransparentImageCompressor {
    public static void main(String[] args) {
        try {
            Thumbnails.of("input.png")
                      .size(800, 600)
                      .outputFormat("png")
                      .outputQuality(0.8)
                      .toFile("compressed_output.png");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.12 結合尺寸調整和質量壓縮

通過同時調整圖片尺寸和質量,可以更有效地壓縮圖片文件大?。?/p>

import net.coobird.thumbnailator.Thumbnails;

import java.io.File;
import java.io.IOException;

public class SizeAndQualityCompressor {
    public static void main(String[] args) {
        try {
            Thumbnails.of("input.jpg")
                      .size(800, 600)
                      .outputQuality(0.5)
                      .toFile("compressed_output.jpg");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在這個例子中,圖片的尺寸被調整到800x600,同時輸出質量被設置為50%。這種方法可以顯著減少圖片文件的大小。

結語

Thumbnailator是一個功能強大且易于使用的Java圖片處理庫。無論是縮放、裁剪、旋轉還是格式轉換,Thumbnailator都提供了簡潔的API,使這些操作變得非常簡單。希望通過這篇博客,你能夠更好地了解和使用Thumbnailator進行圖片處理。

以上就是Java使用Thumbnailator實現(xiàn)圖片處理功能的詳細內容,更多關于Java Thumbnailator圖片處理的資料請關注腳本之家其它相關文章!

相關文章

  • springboot2.3之后hibernate-validator依賴缺失【踩坑】

    springboot2.3之后hibernate-validator依賴缺失【踩坑】

    這篇文章主要介紹了springboot2.3之后hibernate-validator依賴缺失【踩坑】,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Postman form-data、x-www-form-urlencoded的區(qū)別及說明

    Postman form-data、x-www-form-urlencoded的區(qū)別及說明

    這篇文章主要介紹了Postman form-data、x-www-form-urlencoded的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java使用JDBC向MySQL數(shù)據(jù)庫批次插入10W條數(shù)據(jù)(測試效率)

    Java使用JDBC向MySQL數(shù)據(jù)庫批次插入10W條數(shù)據(jù)(測試效率)

    使用JDBC連接MySQL數(shù)據(jù)庫進行數(shù)據(jù)插入的時候,特別是大批量數(shù)據(jù)連續(xù)插入(100000),如何提高效率呢?今天小編通過本教程給大家介紹下
    2016-12-12
  • Java中的@builder建造者模式詳細解析

    Java中的@builder建造者模式詳細解析

    這篇文章主要介紹了Java中的@builder建造者模式詳細解析,使用 @Builder 注解可以簡化手動編寫建造者模式的代碼,使代碼更加簡潔易讀,它可以自動生成鏈式調用的方法來設置對象的屬性,并且可以在需要時進行可選屬性的設置,需要的朋友可以參考下
    2024-01-01
  • java對象中什么時候適合用static修飾符踩坑解決記錄

    java對象中什么時候適合用static修飾符踩坑解決記錄

    這篇文章主要為大家介紹了java對象中什么時候適合用static修飾符踩坑解決記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • java awt實現(xiàn)計算器功能

    java awt實現(xiàn)計算器功能

    這篇文章主要為大家詳細介紹了java awt實現(xiàn)計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Mybatis分頁查詢的實現(xiàn)(Rowbounds和PageHelper)

    Mybatis分頁查詢的實現(xiàn)(Rowbounds和PageHelper)

    本文主要介紹了Mybatis分頁查詢的實現(xiàn)(Rowbounds和PageHelper),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java異常處理的最佳實踐分享

    Java異常處理的最佳實踐分享

    在我多年的Java開發(fā)經(jīng)驗中,異常處理無疑是項目開發(fā)中必寫的模塊,雖然Java它本身提供了異常處理機制,但很多開發(fā)者在使用過程中往往會犯一些常見的錯誤,導致程序出現(xiàn)不必要的異常捕獲和性能問題,在本文中,我將分享一些關于Java異常處理的實用技巧,需要的朋友可以參考下
    2025-08-08
  • Java 類加載機制的應用案例

    Java 類加載機制的應用案例

    Java類加載機制通過雙親委派模型分階段加載類(加載、驗證、準備、解析、初始化等),確保類唯一性與安全性,支持熱部署、插件隔離等場景,是解決類沖突和開發(fā)框架的核心技術,下面給大家介紹Java 類加載機制的應用案例,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • java中Hutool包的常用方法總結

    java中Hutool包的常用方法總結

    這篇文章主要為大家詳細介紹了java在工作中中Hutool包的一些常用方法總結,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12

最新評論

平山县| 顺昌县| 东兰县| 寿宁县| 清丰县| 长泰县| 景德镇市| 岳普湖县| 兖州市| 江津市| 安塞县| 威远县| 林周县| 平乐县| 瑞金市| 福贡县| 永新县| 太原市| 天柱县| 顺昌县| 石家庄市| 彭阳县| 阿坝县| 卫辉市| 武夷山市| 迁西县| 新化县| 榆社县| 越西县| 安溪县| 凤翔县| 徐汇区| 安阳县| 永靖县| 额尔古纳市| 丽水市| 太原市| 鹤山市| 麻江县| 固原市| 永和县|