2010-03-03 63 views
5

Tôi đang cố gắng tạo hình ảnh SVG và sau đó chuyển mã sang PNG bằng cách sử dụng Apache Batik. Tuy nhiên, tôi kết thúc với một hình ảnh trống rỗng và tôi không thể thấy tại sao.Nhận hình ảnh trống khi chuyển mã SVG sang PNG

Tôi sử dụng Tài liệu từ SVGDomImplementation làm cơ sở cho việc chuyển mã của tôi (để tránh ghi SVG vào đĩa và tải lại). Dưới đây là ví dụ:

DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation(); 
    String namespace = SVGDOMImplementation.SVG_NAMESPACE_URI; 
    Document document = domImpl.createDocument(namespace, "svg", null); 

    //stuff that builds SVG (and works) 

    TranscoderInput transcoderInput = new TranscoderInput(svgGenerator.getDOMFactory()); 
    PNGTranscoder transcoder = new PNGTranscoder(); 
    transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, new Float(svgWidth)); 
    transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, new Float(svgHeight)); 

    try { 
    File temp = File.createTempFile(key, ".png"); 
    FileOutputStream outputstream = new FileOutputStream(temp); 

    TranscoderOutput output = new TranscoderOutput(outputstream); 

    transcoder.transcode(transcoderInput, output); 
    outputstream.flush(); 
    outputstream.close(); 
    name = temp.getName(); 
    } catch (IOException ioex) { 
    ioex.printStackTrace(); 
    } catch (TranscoderException trex) { 
    trex.printStackTrace(); 
    } 

Vấn đề của tôi là hình ảnh kết quả trống và tôi không thể thấy lý do. Bất kỳ gợi ý nào?

Trả lời

1

Tôi nghĩ điều đó phụ thuộc vào cách bạn tạo tài liệu SVG. Bạn đang sử dụng số nào svgGenerator cho (mà tôi giả định là SVGGraphics2D)?

TranscoderInput transcoderInput = new TranscoderInput(svgGenerator.getDOMFactory()); 

Nếu bạn đã xây dựng được các tài liệu SVG trong document, sau đó bạn nên vượt qua nó để các nhà xây dựng TranscoderInput.

This page có ví dụ về cách rasterizing SVG DOM thành JPEG.

+0

Đúng, svgGenerator là SVGGraphics2D. GetDOMFactory() trả về cùng một tài liệu/đối tượng giống như đối tượng tôi tạo ở đầu phương thức, vì vậy nó không tạo ra sự khác biệt nào. Tôi đã vượt qua ví dụ JPEG vài lần. Có lẽ nó không đủ để thay đổi ví dụ đó thành PNG (tôi đã không thực sự thử nghiệm ví dụ cụ thể đó) và có lẽ trình chuyển mã PNG cần một số cài đặt khác/bổ sung mà tôi không thấy. Tôi đã giải quyết được sự cố thực tế của mình (chuyển SVG thành PDF đúng cách) theo cách khác, vì vậy điều này không cần thiết nữa. – fiskeben

Các vấn đề liên quan