You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-users@xmlgraphics.apache.org by Rich Quist <Ri...@mathworks.com> on 2007/08/21 17:48:59 UTC
Transcoded images are being clipped....
I'm probably missing something really simple here. I'm using Batik 1.6
to generate svg output from a java application (using SVGGraphics2D) and
then using a transcoder to convert that output to an image format. The
problem I'm seeing is that the generated image is clipped/cut off on the
right hand side. The original application dimensions are 600x400 (width
x height) pixels, and the generated image is also that size, but nothing
seems to draw beyond the 400-pixel mark on the right side. I'd
appreciate any suggestions on how to resolve this.
Here are the details:
In a small test application's paint() method I'm drawing a filled
rectangle, overlaying a few lines and outputting some text. I generate
an svg file from this using the following code and, when viewed in a
browser it looks fine:
Dimension dim = panel.getSize();
// Get a DOMImplementation
DOMImplementation domImpl =
GenericDOMImplementation.getDOMImplementation();
// Create an instance of org.w3c.dom.Document
Document document = domImpl.createDocument(null, "svg",
null);
// Create an instance of the SVG Generator
SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
// Ask to render into the SVG Graphics2D implementation
panel.print(svgGenerator);
String svgFilePath = "c:\\temp\\batik.svg";
StringWriter svgOutput = new StringWriter();
svgGenerator.stream(svgOutput);
FileOutputStream svgfout = new
FileOutputStream(svgFilePath);
svgfout.write(svgOutput.toString().getBytes());
svgfout.flush();
svgfout.close();
Then I create a StringReader from the svg output and attempt to
transcode the output to an image format (jpeg/png):
StringReader reader = new StringReader(svgOutput.toString());
JPEGTranscoder jpegt = new JPEGTranscoder();
jpegt.addTranscodingHint(JPEGTranscoder.KEY_QUALITY,
new Float(.8));
jpegt.addTranscodingHint(JPEGTranscoder.KEY_HEIGHT, new
Float(dim.height));
jpegt.addTranscodingHint(JPEGTranscoder.KEY_WIDTH, new
Float(dim.width));
FileOutputStream fout = new
FileOutputStream("c:\\temp\\batik.jpg");
TranscoderOutput output = new TranscoderOutput(fout);
TranscoderInput input = new TranscoderInput(reader);
transcoder.transcode(input, output);
fout.flush();
fout.close();
Thanks in advance.
RE: Transcoded images are being clipped....
Posted by Rich Quist <Ri...@mathworks.com>.
batik-1.7beta1 seems to have fixed this issue
________________________________
From: Rich Quist
Sent: Tuesday, August 21, 2007 11:49 AM
To: batik-users@xmlgraphics.apache.org
Subject: Transcoded images are being clipped....
I'm probably missing something really simple here. I'm using Batik 1.6
to generate svg output from a java application (using SVGGraphics2D) and
then using a transcoder to convert that output to an image format. The
problem I'm seeing is that the generated image is clipped/cut off on the
right hand side. The original application dimensions are 600x400 (width
x height) pixels, and the generated image is also that size, but nothing
seems to draw beyond the 400-pixel mark on the right side. I'd
appreciate any suggestions on how to resolve this.
Here are the details:
In a small test application's paint() method I'm drawing a filled
rectangle, overlaying a few lines and outputting some text. I generate
an svg file from this using the following code and, when viewed in a
browser it looks fine:
Dimension dim = panel.getSize();
// Get a DOMImplementation
DOMImplementation domImpl =
GenericDOMImplementation.getDOMImplementation();
// Create an instance of org.w3c.dom.Document
Document document = domImpl.createDocument(null, "svg",
null);
// Create an instance of the SVG Generator
SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
// Ask to render into the SVG Graphics2D implementation
panel.print(svgGenerator);
String svgFilePath = "c:\\temp\\batik.svg";
StringWriter svgOutput = new StringWriter();
svgGenerator.stream(svgOutput);
FileOutputStream svgfout = new
FileOutputStream(svgFilePath);
svgfout.write(svgOutput.toString().getBytes());
svgfout.flush();
svgfout.close();
Then I create a StringReader from the svg output and attempt to
transcode the output to an image format (jpeg/png):
StringReader reader = new StringReader(svgOutput.toString());
JPEGTranscoder jpegt = new JPEGTranscoder();
jpegt.addTranscodingHint(JPEGTranscoder.KEY_QUALITY,
new Float(.8));
jpegt.addTranscodingHint(JPEGTranscoder.KEY_HEIGHT, new
Float(dim.height));
jpegt.addTranscodingHint(JPEGTranscoder.KEY_WIDTH, new
Float(dim.width));
FileOutputStream fout = new
FileOutputStream("c:\\temp\\batik.jpg");
TranscoderOutput output = new TranscoderOutput(fout);
TranscoderInput input = new TranscoderInput(reader);
transcoder.transcode(input, output);
fout.flush();
fout.close();
Thanks in advance.