亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 SVGSalamander 將 SVG 轉為圖像無法正確渲染 SVG

使用 SVGSalamander 將 SVG 轉為圖像無法正確渲染 SVG

神不在的星期二 2023-10-19 21:02:04
我曾為 iText PDF 文檔進行 SVG 圖像渲染。為此,我使用 SVGSalamander 將 SVG 轉換為圖像格式。它工作正常,但有一個奇怪的行為,即某些 SVG 圖像在某些圖像正在渲染時無法正確渲染。那些錯誤渲染的 svg 與真實圖像不對齊。我嘗試過,但我不明白為什么它只發生在某些圖像上。如果有人幫助我解決這個問題,我真的很感激。Java代碼:private static Image createSVGImage(PdfWriter pdfWriter, String imageEntry) throws BadElementException {        Image image = null;        Graphics2D g2dgraphics =null;        PdfTemplate template = null;        try{            SVGDiagram diagram = SVGCache.getSVGUniverse().getDiagram( new java.io.File( imageEntry ).toURI() );            template = pdfWriter.getDirectContent().createTemplate( diagram.getWidth(), diagram.getHeight());            diagram.setIgnoringClipHeuristic(true);             g2dgraphics= new PdfGraphics2D(template, diagram.getWidth(), diagram.getHeight());        diagram.render(g2dgraphics);    }catch( Exception e ){        e.printStackTrace();    } finally {        if( g2dgraphics != null ){            g2dgraphics.dispose();          image = Image.getInstance(template);        }        g2dgraphics.dispose();    }    return image;}SVG xml 代碼不對齊<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">  <path d="M19,16a46,46 0,1,0 62,0l-8,8a34,34 0,1,1-46,0z" fill="#069"/>  <path d="M46,43v35a28,28 0,0,1-14-49zM54,43v35a28,28 0,0,0 14-49z" fill="#396"/>  <circle r="15" cx="50" cy="18" fill="#900"/></svg>真實圖像上面這段代碼的輸出圖像
查看完整描述

1 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

我真的不知道為什么這個庫會發生這種情況,因為沒有答案,我已將 SVGSalamendar 更改為 Batik 庫,如果有人需要,這是它的工作代碼


Maven 依賴項


<dependency>

    <groupId>org.apache.xmlgraphics</groupId>

    <artifactId>batik-svggen</artifactId>

    <version>1.11</version>

</dependency>


<!-- https://mvnrepository.com/artifact/batik/batik-transcoder -->

<dependency>

 <groupId>org.apache.xmlgraphics</groupId>

  <artifactId>batik-transcoder</artifactId>

   <version>1.11</version>

</dependency>


<!-- https://mvnrepository.com/artifact/batik/batik-rasterizer -->

<dependency>

 <groupId>org.apache.xmlgraphics</groupId>

  <artifactId>batik-rasterizer</artifactId>

  <version>1.11</version>

</dependency>

Java 代碼反映與上面相同的結果:


private static Image createSVGImage(PdfWriter pdfWriter, String imageEntry) throws BadElementException, IOException {

        Image image = null;

        final BufferedImage[] imagePointer = new BufferedImage[1];


        PdfContentByte pdfCB = new PdfContentByte(pdfWriter);   


         try {


                TranscoderInput input = new TranscoderInput(new FileInputStream(imageEntry));


                ImageTranscoder t = new ImageTranscoder() {


                    @Override

                    public BufferedImage createImage(int w, int h) {

                        return new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

                    }


                    @Override

                    public void writeImage(BufferedImage img, TranscoderOutput output) throws TranscoderException {

                        // TODO Auto-generated method stub

                         imagePointer[0] = img;


                    }

                };

                t.addTranscodingHint(ImageTranscoder.KEY_FORCE_TRANSPARENT_WHITE,

                        Boolean.FALSE);

                t.addTranscodingHint(ImageTranscoder.KEY_BACKGROUND_COLOR, Color.white);

                t.transcode(input, null);

            }

            catch (TranscoderException ex) {

                // Requires Java 6

                ex.printStackTrace();

                throw new IOException("Couldn't convert ");

            }


          image = Image.getInstance(pdfCB, imagePointer[0], 1);     


        return image;

    }


查看完整回答
反對 回復 2023-10-19
  • 1 回答
  • 0 關注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號