后臺(tái)通過(guò)SVG生成圖片

本文的初衷僅供自己做備忘筆記, 內(nèi)容大多從網(wǎng)上搜集和整理, 并非都是自己原創(chuàng).
參考的來(lái)源我會(huì)在后面注明, 對(duì)于可能遺漏的來(lái)源, 還請(qǐng)相關(guān)原創(chuàng)作者提醒, 非常感謝.

參考來(lái)源:
https://xmlgraphics.apache.org/batik/using/transcoder.html

通過(guò)Apache的batik實(shí)現(xiàn)svg轉(zhuǎn)圖片, 這里主要使用的batik中的Transcoder API.

transcoder API(org.apache.batik.transcoder)主要提供了從輸入到輸出的轉(zhuǎn)換API. 而其中的transcoder API (org.apache.batik.transcoder.image)可以將一個(gè)SVG文檔光柵化, 變成像JPEG, PNG 或TIFF這樣的圖片.

創(chuàng)建圖片

下面的案例中使用JPEGTranscoder展示如何將一個(gè)SVG文檔變成JPEG圖片.

import java.io.*;

import org.apache.batik.transcoder.image.JPEGTranscoder;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;

public class SaveAsJPEG {

    public static void main(String[] args) throws Exception {

        // Create a JPEG transcoder
        JPEGTranscoder t = new JPEGTranscoder();

        // Set the transcoding hints.
        t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(.8));

        // Create the transcoder input.
        String svgURI = new File(args[0]).toURL().toString();
        TranscoderInput input = new TranscoderInput(svgURI);

        // Create the transcoder output.
        OutputStream ostream = new FileOutputStream("out.jpg");
        TranscoderOutput output = new TranscoderOutput(ostream);

        // Save the image.
        t.transcode(input, output);

        // Flush and close the stream.
        ostream.flush();
        ostream.close();
        System.exit(0);
    }
}

這段代碼創(chuàng)建了一個(gè)JPEGTranscoder, 并設(shè)置了轉(zhuǎn)換線索(transcoding hint). 線索中指定了編碼的品質(zhì). 然后創(chuàng)建輸入和輸出流, 輸入流接收來(lái)自命令行的第一個(gè)參數(shù), 作為URI.輸出流最終輸出一個(gè)out.jpg文件. 最后關(guān)閉流.
然后運(yùn)行:

  1. 代碼保存為 SaveAsJPEG.java.
  2. 完成編譯.
  3. 選擇一個(gè)SVG文件, 然后鍵入如下命令:
    java SaveAsJPEG filename.svg
  4. 檢查輸出的out.jpg文件.

除此以外, 程序還可以添加額外的線索(hits)來(lái)添加用戶想要的樣式, 比如語(yǔ)言或背景色.

自己實(shí)驗(yàn)的時(shí)候, 只用到了3個(gè)包: batik-all-1.12.jar/xml-apis-ext-1.3.04.jar/xmlgraphics-commons-2.4.jar, 其他功能還未實(shí)驗(yàn), 可能會(huì)需要其他未列出的jar包.
另外如果svg的圖片比較大(比如我用https://github.com/yuerLoveCoding/MySvgYuyahaoDrawChinaMap的中國(guó)地圖的svg), 最終輸出會(huì)只顯示部分, 后來(lái)通過(guò)
hint設(shè)置JPEGTranscoder.KEY_HEIGHTJPEGTranscoder.KEY_WIDTH設(shè)定圖片尺寸來(lái)解決的(也許我設(shè)置的不對(duì), 沒(méi)深入研究).

官網(wǎng)文檔里的其他功能, 比如截取/使用CSS/DOM轉(zhuǎn)圖片,暫未記錄(挖坑)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容