[prev in list] [next in list] [prev in thread] [next in thread] 

List:       batik-dev
Subject:    Re: documentation is a terrible thing to waste :-)
From:       Mariano Kamp <mkamp () codamax ! com>
Date:       2001-02-18 18:45:49
[Download RAW message or body]

On Sunday 11 February 2001 00:14 Mariano Kamp wrote:
> > > A small price to pay though for
> > > documentation. Is there any specific need that you see for the
> > > documentation to address?
> >
> > I think that a developer's Q&A would be good, i.e., questions like,
> > "How do I create a JPEG or PNG image from an SVG Document" with
> > an answer showing a code snippet, or "What is the bridge?" with a
> > short answer on the module's high level responsibility.
> > Any other suggestions?
>
> I guess meanwhile I should be qualified to provide the base for the answer
> of the first question. The information is on the list already.
> I'll do that on next weeks sunday and post it back to the list. Ryan,
> maybe you can incorporate it?!
Well, my initial guess was wrong. I am not qualified to build the base for 
the first question. There are too many black holes for me. 
I attached the starting point of my "question" to this mail, but it's 
rubbish. I have to go into it much deeper to understand what all the classes 
are doing and right now I can't do that. I am currently working on Sundays 
for my regular job. I probably resume this later on.

Sorry,
Mariano


-- 
mariano kamp
codamax ag
hessenring 89

61348 bad homburg v.d.h.
germany

phone  +49 6172 182 473
fax    +49 6172 182 475
mobile +49 173 300 8564 (changed!)

["QA.html" (text/html)]

<h1>How do I create a JPEG or PNG image from a SVG document?</h1>
<p>Converting an SVG document to an image is referred to as transcoding.</p>
<p>All Transcoders are implementing the \
<code><b>org.apache.batik.transcoder.Transcoder</b></code> interface. The Transcoder \
interface defines the <code><b>transcode(TranscoderInput input, TranscoderOutput \
output)</b></code> method. TranscoderInput is used to wrap different means of input \
sources in a uniform way. In the below mentioned sample code a Document will be \
passed to the transcode method. TranscoderOutput is the matching counterpart and will \
be used to wrap an OutputStream in the below mentioned sample code.</p> \
<p>Furthermore <code><b>org.apache.batik.transcoder.Transcoder</b></code> defines \
methods for supplying hints to the transcoding process.<br>General hints can be \
applied like <b><code>XMLAbstractTranscoder.KEY_XML_PARSER_CLASSNAME</b></code> and \
more specialised hints like <b><code>JPEGTranscoder.KEY_QUALITY</b></code>.<br> With \
<b><code>ImageTranscoder.KEY_HEIGHT</b></code> and \
<b><code>ImageTranscoder.KEY_WIDTH</b></code> the height and width of the resulting \
image could probably be hinted, but I wasn't able to get this working:<br>Exception \
                in thread "main" java.lang.NullPointerException<br>
        at org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(DefaultUnitProcessorContext.java:69)<br>
                
        at org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:459)<br>
                
        at org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)<br>
                
        at org.apache.batik.bridge.SVGUtilities.svgToUserSpace(SVGUtilities.java:1173)<br>
                
        at org.apache.batik.bridge.SVGSVGElementBridge.createGraphicsNode(SVGSVGElementBridge.java:88)<br>
                
        at org.apache.batik.bridge.ConcreteGVTBuilder.build(ConcreteGVTBuilder.java:85)<br>
                
        at org.apache.batik.transcoder.image.ImageTranscoder.transcode(ImageTranscoder.java:174)<br>
                
        at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:122)<br>
  at JavaToSvgToJpeg.main(JavaToSvgToJpeg.java:92)<br><br>
 
Instead height and width can be specified in the Document as can be seen in the below \
mentioned sample code. </p>
<p>Currently batik comes with two concrete implementations for image transcoders:<br>
      <ul>
	<li>
	  <code><b>org.apache.batik.transcoder.image.JPEGTranscoder</b></code>
	</li>
	<li>
	  <code><b>org.apache.batik.transcoder.image.PNGTranscoder</b></code>
	</li>
      </ul>
</p>
<hr>
<code>
/*****************************************************************************<br>
&nbsp;*&nbsp;Copyright&nbsp;(C)&nbsp;The&nbsp;Apache&nbsp;Software&nbsp;Foundation.&nb \
sp;All&nbsp;rights&nbsp;reserved.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br>
 &nbsp;*&nbsp;-------------------------------------------------------------------------&nbsp;*<br>
 &nbsp;*&nbsp;This&nbsp;software&nbsp;is&nbsp;published&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;Apache&nbsp;Software&nbsp;License&nbsp;*<br>
 &nbsp;*&nbsp;version&nbsp;1.1,&nbsp;a&nbsp;copy&nbsp;of&nbsp;which&nbsp;has&nbsp;been&nbsp;included&nbsp;with&nbsp;this&nbsp;distribution&nbsp;in&nbsp;&nbsp;*<br>
 &nbsp;*&nbsp;the&nbsp;LICENSE&nbsp;file.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br>
 &nbsp;*****************************************************************************/<br>
 <br>
import&nbsp;org.apache.batik.dom.svg.SVGDOMImplementation;<br>
import&nbsp;org.apache.batik.svggen.SVGGraphics2D;<br>
import&nbsp;org.apache.batik.transcoder.image.JPEGTranscoder;<br>
import&nbsp;org.apache.batik.transcoder.TranscoderInput;<br>
import&nbsp;org.apache.batik.transcoder.TranscoderOutput;<br>
import&nbsp;org.apache.batik.transcoder.TranscoderException;<br>
<br>
import&nbsp;org.w3c.dom.Document;<br>
import&nbsp;org.w3c.dom.Element;<br>
import&nbsp;org.w3c.dom.DOMImplementation;<br>
<br>
import&nbsp;java.awt.Color;<br>
import&nbsp;java.awt.Dimension;<br>
import&nbsp;java.io.File;<br>
import&nbsp;java.io.FileOutputStream;<br>
import&nbsp;java.io.OutputStreamWriter;<br>
<br>
/**<br>
&nbsp;*&nbsp;An&nbsp;example&nbsp;showing&nbsp;how&nbsp;to:<br>
&nbsp;*&nbsp;&nbsp;a)&nbsp;Use&nbsp;SVGGraphics2D&nbsp;to&nbsp;generate&nbsp;a&nbsp;DOM&nbsp;tree<br>
 &nbsp;*&nbsp;&nbsp;b)&nbsp;Use&nbsp;the&nbsp;generated&nbsp;DOM&nbsp;tree&nbsp;as&nbsp;an&nbsp;input&nbsp;to&nbsp;a&nbsp;transcoder,&nbsp;JPEG<br>
 &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;this&nbsp;example.<br>
&nbsp;*<br>
&nbsp;*&nbsp;@author&nbsp;<a&nbsp;href="mailto:vincent.hardy@eng.sun.com">Vincent&nbsp;Hardy</a><br>
 &nbsp;*&nbsp;@version&nbsp;$Id:&nbsp;JavaToSvgToJpeg.java,v&nbsp;1.2&nbsp;2001/02/07&nbsp;18:34:51&nbsp;mkamp&nbsp;Exp&nbsp;$<br>
 &nbsp;*/<br>
public&nbsp;class&nbsp;JavaToSvgToJpeg&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;final&nbsp;String&nbsp;USAGE&nbsp;=&nbsp;"java&nbsp;JavaToSvgJpeg&nbsp;<outputJpegFileName>";<br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args[])&nbsp;throws&nbsp;Exception{<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(args.length&nbsp;<&nbsp;1){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(USAGE);<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.exit(0);<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Build&nbsp;SVGGraphics2D&nbsp;with&nbsp;Batik's&nbsp;DOM&nbsp;implementation<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOMImplementation&nbsp;impl&nbsp;=&nbsp;SVGDOMImplementation.getDOMImplementation();<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;namespaceURI&nbsp;=&nbsp;SVGDOMImplementation.SVG_NAMESPACE_URI;<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc&nbsp;=&nbsp;impl.createDocument(namespaceURI,&nbsp;"svg",&nbsp;null);<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SVGGraphics2D&nbsp;g&nbsp;=&nbsp;new&nbsp;SVGGraphics2D(doc);<br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Draw&nbsp;something<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setPaint(Color.black);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.fillRect(0,&nbsp;0,&nbsp;300,&nbsp;300);<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setPaint(Color.white);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.fillOval(20,&nbsp;20,&nbsp;260,&nbsp;260);<br>


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Set&nbsp;document&nbsp;size<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>doc.getDocumentElement().setAttributeNS(null,&nbsp;"width",&nbsp;"300");<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.getDocumentElement().setAttributeNS(null,&nbsp;"height",&nbsp;"300");</b><br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Set&nbsp;document&nbsp;content<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.getDocumentElement().appendChild(g.getRoot());<br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Convert&nbsp;to&nbsp;JPEG<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>TranscoderInput&nbsp;svgInput&nbsp;=&nbsp;new&nbsp;TranscoderInput(doc);<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JPEGTranscoder&nbsp;jpegTranscoder&nbsp;=&nbsp;new&nbsp;JPEGTranscoder();<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpegTranscoder.addTranscodingHint(JPEGTranscoder.KEY_XML_PARSER_CLASSNAME,<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"org.apache.crimson.parser.XMLReaderImpl");<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpegTranscoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY,<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Float(1));<br>


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;transcode&nbsp;image<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;imageFile&nbsp;=&nbsp;new&nbsp;File(args[0]);<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TranscoderOutput&nbsp;imageOutput&nbsp;=&nbsp;new&nbsp;TranscoderOutput(new&nbsp;FileOutputStream(imageFile));<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpegTranscoder.transcode(svgInput,&nbsp;imageOutput);<br>
 &nbsp;&nbsp;&nbsp;&nbsp;</b>}<br>
}<br>


</code>



---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic