亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

使用Thumbnailator進(jìn)行圖片處理

Thumbnailator是一個(gè)簡(jiǎn)單且功能強(qiáng)大的Java庫(kù),用于生成縮略圖和執(zhí)行其他圖片處理任務(wù)。在這篇博客中,我們將介紹如何使用Thumbnailator進(jìn)行圖片的縮放、裁剪、旋轉(zhuǎn)等操作,并通過(guò)一些代碼示例來(lái)展示其強(qiáng)大功能。

1. 引入依賴

首先,在你的項(xiàng)目中添加Thumbnailator的依賴。以Maven項(xiàng)目為例,可以在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)指定了目標(biāo)圖片的寬度和高度,toFile("output.jpg")則將處理后的圖片保存到文件。

2.2 保持寬高比

有時(shí)我們希望縮放圖片但保持其寬高比。這可以通過(guò)scale方法實(shí)現(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)方法指定從圖片中央裁剪一個(gè)200x200的區(qū)域。

2.4 旋轉(zhuǎn)圖片

我們還可以使用Thumbnailator旋轉(zhuǎn)圖片。以下代碼演示了如何將圖片順時(shí)針旋轉(zhuǎn)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)方法將圖片順時(shí)針旋轉(zhuǎn)90度。

3. 高級(jí)使用

3.1 批量處理

Thumbnailator還支持批量處理圖片。以下代碼演示了如何將一個(gè)目錄中的所有圖片縮放到指定大?。?/p>

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 轉(zhuǎn)換圖片格式

Thumbnailator也可以用于轉(zhuǎn)換圖片格式。以下代碼演示了如何將JPEG圖片轉(zhuǎn)換為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可以輕松地在圖片上添加水印。以下代碼演示了如何在圖片右下角添加一個(gè)水?。?/p>

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 調(diào)整圖片質(zhì)量

可以通過(guò)Thumbnailator調(diào)整輸出圖片的質(zhì)量,特別是在生成JPEG格式圖片時(shí):

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)方法將輸出圖片的質(zhì)量設(shè)置為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 鏈?zhǔn)讲僮?/h4>

Thumbnailator允許鏈?zhǔn)讲僮?,可以在一次操作中完成多種圖片處理任務(wù):

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();
        }
    }
}

上述代碼展示了如何在一次操作中完成圖片的縮放、旋轉(zhuǎn)、添加水印和調(diào)整質(zhì)量。

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進(jìn)行其他處理
        } 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進(jìn)行其他處理
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.9 壓縮圖片

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

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)將輸出圖片的質(zhì)量設(shè)置為50%。這個(gè)參數(shù)的取值范圍是0到1,值越低,壓縮率越高,文件越小,但質(zhì)量也會(huì)越低。

3.10 限制文件大小進(jìn)行壓縮

通過(guò)調(diào)整圖片的尺寸和質(zhì)量,可以嘗試將圖片壓縮到接近某個(gè)目標(biāo)文件大小。下面是一個(gè)示例,通過(guò)迭代調(diào)整圖片質(zhì)量來(lái)接近目標(biāo)文件大?。?/p>

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; // 目標(biāo)文件大小為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 壓縮并保持透明度

對(duì)于PNG等支持透明度的圖片,可以在壓縮時(shí)保持透明度:

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 結(jié)合尺寸調(diào)整和質(zhì)量壓縮

通過(guò)同時(shí)調(diào)整圖片尺寸和質(zhì)量,可以更有效地壓縮圖片文件大?。?/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();
        }
    }
}

在這個(gè)例子中,圖片的尺寸被調(diào)整到800x600,同時(shí)輸出質(zhì)量被設(shè)置為50%。這種方法可以顯著減少圖片文件的大小。

結(jié)語(yǔ)

Thumbnailator是一個(gè)功能強(qiáng)大且易于使用的Java圖片處理庫(kù)。無(wú)論是縮放、裁剪、旋轉(zhuǎn)還是格式轉(zhuǎn)換,Thumbnailator都提供了簡(jiǎn)潔的API,使這些操作變得非常簡(jiǎn)單。希望通過(guò)這篇博客,你能夠更好地了解和使用Thumbnailator進(jìn)行圖片處理。

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

相關(guān)文章

  • java實(shí)現(xiàn)學(xué)生信息錄入界面

    java實(shí)現(xiàn)學(xué)生信息錄入界面

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生信息錄入界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • java實(shí)現(xiàn)投票程序設(shè)計(jì)

    java實(shí)現(xiàn)投票程序設(shè)計(jì)

    這篇文章主要介紹了java實(shí)現(xiàn)投票程序設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-12-12
  • java實(shí)現(xiàn)在線預(yù)覽--poi實(shí)現(xiàn)word、excel、ppt轉(zhuǎn)html的方法

    java實(shí)現(xiàn)在線預(yù)覽--poi實(shí)現(xiàn)word、excel、ppt轉(zhuǎn)html的方法

    這篇文章主要介紹了java實(shí)現(xiàn)在線預(yù)覽--poi實(shí)現(xiàn)word、excel、ppt轉(zhuǎn)html的方法,本文需要引入poi的jar包給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2019-09-09
  • mybatis單筆批量保存實(shí)體數(shù)據(jù)的方法

    mybatis單筆批量保存實(shí)體數(shù)據(jù)的方法

    這篇文章主要介紹了mybatis單筆批量保存實(shí)體數(shù)據(jù)的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • java文件上傳下載代碼實(shí)例

    java文件上傳下載代碼實(shí)例

    這篇文章主要介紹了java文件上傳下載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 關(guān)于SpringBoot 打包成的可執(zhí)行jar不能被其他項(xiàng)目依賴的問(wèn)題

    關(guān)于SpringBoot 打包成的可執(zhí)行jar不能被其他項(xiàng)目依賴的問(wèn)題

    這篇文章主要介紹了關(guān)于SpringBoot 打包成的可執(zhí)行jar不能被其他項(xiàng)目依賴的問(wèn)題,本文給大家通過(guò)圖文實(shí)例相結(jié)合給大家分享解決方法,需要的朋友可以參考下
    2020-10-10
  • Java深入學(xué)習(xí)圖形用戶界面GUI之創(chuàng)建窗體

    Java深入學(xué)習(xí)圖形用戶界面GUI之創(chuàng)建窗體

    圖形編程中,窗口是一個(gè)重要的概念,窗口其實(shí)是一個(gè)矩形框,應(yīng)用程序可以使用其從而達(dá)到輸出結(jié)果和接受用戶輸入的效果,學(xué)習(xí)了GUI就讓我們用它來(lái)創(chuàng)建一個(gè)窗體
    2022-05-05
  • 詳解java迭代器模式

    詳解java迭代器模式

    這篇文章主要介紹了java迭代器模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 詳解SpringBoot如何實(shí)現(xiàn)緩存預(yù)熱

    詳解SpringBoot如何實(shí)現(xiàn)緩存預(yù)熱

    緩存預(yù)熱是指在 Spring Boot 項(xiàng)目啟動(dòng)時(shí),預(yù)先將數(shù)據(jù)加載到緩存系統(tǒng)(如 Redis)中的一種機(jī)制,下面我們就來(lái)看看SpringBoot是如何實(shí)現(xiàn)緩存預(yù)熱的吧
    2024-01-01
  • Java建造者設(shè)計(jì)模式詳解

    Java建造者設(shè)計(jì)模式詳解

    這篇文章主要為大家詳細(xì)介紹了Java建造者設(shè)計(jì)模式,對(duì)建造者設(shè)計(jì)模式進(jìn)行分析理解,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評(píng)論