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

Java使用Apache Batik實(shí)現(xiàn)將SVG轉(zhuǎn)換為PNG

 更新時(shí)間:2026年01月21日 15:32:27   作者:weixin_46244623  
在項(xiàng)目中經(jīng)常需要將 SVG 圖標(biāo)或圖形轉(zhuǎn)換為 PNG 格式,Apache Batik 是一個(gè)強(qiáng)大的 SVG 處理庫(kù),可以輕松實(shí)現(xiàn) SVG → PNG 的轉(zhuǎn)換,下面我們就來(lái)看看具體實(shí)現(xiàn)方法吧

在項(xiàng)目中經(jīng)常需要將 SVG 圖標(biāo)或圖形轉(zhuǎn)換為 PNG 格式,比如生成固定尺寸的 favicon、圖標(biāo)等。Apache Batik 是一個(gè)強(qiáng)大的 SVG 處理庫(kù),可以輕松實(shí)現(xiàn) SVG → PNG 的轉(zhuǎn)換。

本文介紹一種簡(jiǎn)單可靠的方法:通過(guò)網(wǎng)絡(luò) URL 獲取 SVG,并轉(zhuǎn)換為指定寬高的 PNG 文件。

1. 添加 Maven 依賴(lài)

在 pom.xml 中添加 Apache Batik 依賴(lài)(推薦使用較新版本):

<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>batik-transcoder</artifactId>
    <version>1.17</version>
</dependency>
<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>batik-codec</artifactId>
    <version>1.17</version>
</dependency>

注意:Batik 不同模塊需要一起引入,batik-transcoder 負(fù)責(zé)轉(zhuǎn)換,batik-codec 提供 PNG 編碼支持。

2. 核心轉(zhuǎn)換代碼

創(chuàng)建一個(gè)工具類(lèi),直接提供一個(gè)靜態(tài)方法即可調(diào)用:

import org.apache.batik.transcoder.Transcoder;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.PNGTranscoder;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

public class SvgToPngConverter {

    /**
     * 將網(wǎng)絡(luò)上的 SVG 轉(zhuǎn)換為指定寬高的 PNG
     *
     * @param svgUrl      SVG 文件的 URL
     * @param pngFilePath 輸出的 PNG 文件路徑
     * @param width       目標(biāo)寬度(像素)
     * @param height      目標(biāo)高度(像素)
     * @throws IOException       IO 異常
     * @throws TranscoderException 轉(zhuǎn)換異常
     */
    public static void convertSvgToPng(String svgUrl, String pngFilePath, int width, int height)
            throws IOException, TranscoderException {

        // 1. 打開(kāi)網(wǎng)絡(luò)連接獲取 SVG 輸入流
        URL url = new URL(svgUrl);
        URLConnection connection = url.openConnection();
        try (InputStream inputStream = connection.getInputStream();
             OutputStream outputStream = new FileOutputStream(pngFilePath)) {

            // 2. 創(chuàng)建 PNG 轉(zhuǎn)換器
            Transcoder transcoder = new PNGTranscoder();

            // 3. 設(shè)置目標(biāo)寬高(關(guān)鍵?。?
            transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, (float) width);
            transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, (float) height);

            // 4. 設(shè)置輸入和輸出
            TranscoderInput input = new TranscoderInput(inputStream);
            TranscoderOutput output = new TranscoderOutput(outputStream);

            // 5. 執(zhí)行轉(zhuǎn)換
            transcoder.transcode(input, output);
        }
        // try-with-resources 會(huì)自動(dòng)關(guān)閉流
    }

    // 測(cè)試調(diào)用示例
    public static void main(String[] args) {
        try {
            String svgUrl = "https://example.com/favicons/favicon.svg";
            String pngPath = "favicon_64.png";

            convertSvgToPng(svgUrl, pngPath, 64, 64);
            System.out.println("SVG 轉(zhuǎn)換為 PNG 成功!輸出文件:" + pngPath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3. 代碼說(shuō)明

網(wǎng)絡(luò)獲取 SVG:通過(guò) URLConnection 獲取輸入流,支持任何公開(kāi)的 SVG URL。

指定寬高:使用 PNGTranscoder.KEY_WIDTH 和 KEY_HEIGHT 提示,確保輸出 PNG 為指定尺寸(會(huì)等比例縮放并居中)。

資源自動(dòng)關(guān)閉:使用 try-with-resources,避免資源泄漏。

異常處理:建議在實(shí)際項(xiàng)目中記錄日志,而不是靜默吞異常。

4. 運(yùn)行效果

運(yùn)行 main 方法后,會(huì)在項(xiàng)目根目錄生成 favicon_64.png,大小正好是 64×64 像素。

5. 常見(jiàn)問(wèn)題

轉(zhuǎn)換后圖像空白:檢查 SVG URL 是否有效、是否支持 CORS(Batik 直接讀流通常沒(méi)問(wèn)題)。

尺寸不準(zhǔn):確保傳入的 width/height 是 float 類(lèi)型(Batik 要求)。

本地 SVG 文件:如果不是網(wǎng)絡(luò) URL,可直接用 new FileInputStream("local.svg") 替換輸入流。

這個(gè)方法簡(jiǎn)單高效,無(wú)需額外圖形庫(kù),適合后端服務(wù)批量生成圖標(biāo)。如果有更多需求(如添加背景、水?。梢栽?Batik 基礎(chǔ)上擴(kuò)展。

到此這篇關(guān)于Java使用Apache Batik實(shí)現(xiàn)將SVG轉(zhuǎn)換為PNG的文章就介紹到這了,更多相關(guān)Java SVG轉(zhuǎn)PNG內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot+WebSocket實(shí)現(xiàn)即時(shí)通訊功能(Spring方式)

    SpringBoot+WebSocket實(shí)現(xiàn)即時(shí)通訊功能(Spring方式)

    今天給大家分享一個(gè)SpringBoot+WebSocket實(shí)現(xiàn)即時(shí)通訊功能(Spring方式),WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,文章通過(guò)代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • idea中項(xiàng)目文件目錄消失如何解決

    idea中項(xiàng)目文件目錄消失如何解決

    這篇文章主要介紹了idea中項(xiàng)目文件目錄消失的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Spring Boot Actuator端點(diǎn)相關(guān)原理解析

    Spring Boot Actuator端點(diǎn)相關(guān)原理解析

    這篇文章主要介紹了Spring Boot Actuator端點(diǎn)相關(guān)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Mybatis查詢(xún)語(yǔ)句返回對(duì)象和泛型集合的操作

    Mybatis查詢(xún)語(yǔ)句返回對(duì)象和泛型集合的操作

    這篇文章主要介紹了Mybatis查詢(xún)語(yǔ)句返回對(duì)象和泛型集合的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java使用反射創(chuàng)建并操作對(duì)象的方法

    java使用反射創(chuàng)建并操作對(duì)象的方法

    這篇文章主要介紹了java使用反射創(chuàng)建并操作對(duì)象的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Java異常(Exception)處理以及常見(jiàn)異??偨Y(jié)

    Java異常(Exception)處理以及常見(jiàn)異常總結(jié)

    在《Java編程思想》中這樣定義異常,阻止當(dāng)前方法或作用域繼續(xù)執(zhí)行的問(wèn)題,雖然java中有異常處理機(jī)制,但是要明確一點(diǎn),決不應(yīng)該用"正常"的態(tài)度來(lái)看待異常,這篇文章主要給大家介紹了關(guān)于Java異常(Exception)處理以及常見(jiàn)異常的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • JavaSE之File類(lèi)用法(遞歸查找文件)

    JavaSE之File類(lèi)用法(遞歸查找文件)

    這篇文章主要介紹了JavaSE之File類(lèi)用法(遞歸查找文件),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • java導(dǎo)出csv格式文件的方法

    java導(dǎo)出csv格式文件的方法

    這篇文章主要為大家詳細(xì)介紹了java導(dǎo)出csv格式文件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Java JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)(Run-Time Data Areas)

    Java JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)(Run-Time Data Areas)

    運(yùn)行時(shí)數(shù)據(jù)區(qū),是java虛擬機(jī)定義的在程序執(zhí)行期間使用的各種運(yùn)行時(shí)的數(shù)據(jù)區(qū),通過(guò)JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)圖例給大家展示的很詳細(xì),對(duì)JVM 運(yùn)行時(shí)數(shù)據(jù)區(qū)相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • Jenkins安裝和插件管理配置入門(mén)教程

    Jenkins安裝和插件管理配置入門(mén)教程

    這篇文章主要介紹了Jenkins安裝和插件管理知識(shí),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02

最新評(píng)論

木里| 郧西县| 柘荣县| 同德县| 视频| 沁水县| 青冈县| 阿城市| 宁明县| 宽城| 五大连池市| 贵定县| 云南省| 会同县| 长丰县| 镶黄旗| 保亭| 年辖:市辖区| 芜湖市| 天气| 左贡县| 华容县| 凤山县| 石屏县| 永春县| 双鸭山市| 海原县| 新野县| 萍乡市| 靖远县| 定南县| 沿河| 诸城市| 石泉县| 永和县| 两当县| 和龙市| 桃源县| 兰州市| 柯坪县| 翼城县|