SVGGraphics2D drawImage() NullPointerException

Thad Humphries <[email protected]> Sat, 30 Apr 2016 21:26:58 -0400
Newsgroups gmane.text.xml.batik.user
Message-ID <CA+bF-zzvq5t3N9-v-7B-7xdgWmHASoeRnc-HZ0cXxZwuYGXWCA@mail.gmail.com>
--f46d0447862fa744fb0531bdc521
Content-Type: text/plain; charset=UTF-8

I am trying to create an SVG from a BufferedImage using the example at
https://xmlgraphics.apache.org/batik/using/svg-generator.html. The image is
a TIFF read from disk using Apache Commons Imaging. I can successfully
export this image to PNG. However cannot create an SVG. The code is

  public static void main(String[] args) {
    try {
      File inFile = new File(args[0]);
      BufferedImage sourceImage = ImageReadExample.imageReadExample(inFile);
      // Imaging.writeImage(sourceImage, new File("sourceImage.png"),
ImageFormats.PNG, null);

      // Get a DOMImplementation.
      DOMImplementation domImpl =
        GenericDOMImplementation.getDOMImplementation();

      // Create an instance of org.w3c.dom.Document.
      String svgNS = "http://www.w3.org/2000/svg";
      Document document = domImpl.createDocument(svgNS, "svg", null);

      // Create an instance of the SVG Generator.
      SVGGraphics2D svgGenerator = new SVGGraphics2D(document);

      // Ask the test to render into the SVG Graphics2D implementation.
      svgGenerator.drawImage(sourceImage, 0, 0, null);
      ...

When I end with `Imaging.writeImage(sourceImage, new
File("sourceImage.png"), ImageFormats.PNG, null);` a PNG is created.
However at `svgGenerator.drawImage(sourceImage, 0, 0, null);` I get this
stack trace:

java.lang.NullPointerException
at org.apache.batik.svggen.ImageHandlerBase64Encoder.encodeImage(Unknown
Source)
at org.apache.batik.svggen.ImageHandlerBase64Encoder.handleHREF(Unknown
Source)
at org.apache.batik.svggen.ImageHandlerBase64Encoder.handleHREF(Unknown
Source)
at org.apache.batik.svggen.DefaultImageHandler.handleImage(Unknown Source)
at org.apache.batik.svggen.SimpleImageHandler.handleImage(Unknown Source)
at org.apache.batik.svggen.SVGGraphics2D.drawImage(Unknown Source)
at com.corp.util.image.ImageReadExample.main(ImageReadExample.java:49)

I am using Batik 1.8 with Java 1.8.0_91 on MacOS 10.10.5.

-- 
"Hell hath no limits, nor is circumscrib'd In one self-place; but where we
are is hell, And where hell is, there must we ever be" --Christopher
Marlowe, *Doctor Faustus* (v. 121-24)

--f46d0447862fa744fb0531bdc521
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">I am trying to create an SVG from a BufferedImage using th=
e example at=C2=A0<a href=3D"https://xmlgraphics.apache.org/batik/using/svg=
-generator.html">https://xmlgraphics.apache.org/batik/using/svg-generator.h=
tml</a>. The image is a TIFF read from disk using Apache Commons Imaging. I=
 can successfully export this image to PNG. However cannot create an SVG. T=
he code is<div><br></div><div><div>=C2=A0 public static void main(String[] =
args) {</div><div>=C2=A0 =C2=A0 try {</div><div>=C2=A0 =C2=A0 =C2=A0 File i=
nFile =3D new File(args[0]);</div><div>=C2=A0 =C2=A0 =C2=A0 BufferedImage s=
ourceImage =3D ImageReadExample.imageReadExample(inFile);</div><div>=C2=A0 =
=C2=A0 =C2=A0 // Imaging.writeImage(sourceImage, new File(&quot;sourceImage=
.png&quot;), ImageFormats.PNG, null);</div><div><br></div><div>=C2=A0 =C2=
=A0 =C2=A0 // Get a DOMImplementation.</div><div>=C2=A0 =C2=A0 =C2=A0 DOMIm=
plementation domImpl =3D</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 GenericDOMIm=
plementation.getDOMImplementation();</div><div><br></div><div>=C2=A0 =C2=A0=
 =C2=A0 // Create an instance of org.w3c.dom.Document.</div><div>=C2=A0 =C2=
=A0 =C2=A0 String svgNS =3D &quot;<a href=3D"http://www.w3.org/2000/svg">ht=
tp://www.w3.org/2000/svg</a>&quot;;</div><div>=C2=A0 =C2=A0 =C2=A0 Document=
 document =3D domImpl.createDocument(svgNS, &quot;svg&quot;, null);</div><d=
iv><br></div><div>=C2=A0 =C2=A0 =C2=A0 // Create an instance of the SVG Gen=
erator.</div><div>=C2=A0 =C2=A0 =C2=A0 SVGGraphics2D svgGenerator =3D new S=
VGGraphics2D(document);</div><div><br></div><div>=C2=A0 =C2=A0 =C2=A0 // As=
k the test to render into the SVG Graphics2D implementation.</div><div>=C2=
=A0 =C2=A0 =C2=A0 svgGenerator.drawImage(sourceImage, 0, 0, null);</div></d=
iv><div>=C2=A0 =C2=A0 =C2=A0 ...</div><div><br clear=3D"all"><div>When I en=
d with `Imaging.writeImage(sourceImage, new File(&quot;sourceImage.png&quot=
;), ImageFormats.PNG, null);` a PNG is created. However at `svgGenerator.dr=
awImage(sourceImage, 0, 0, null);` I get this stack trace:</div><div><br></=
div><div><div>java.lang.NullPointerException</div><div><span class=3D"" sty=
le=3D"white-space:pre">	</span>at org.apache.batik.svggen.ImageHandlerBase6=
4Encoder.encodeImage(Unknown Source)</div><div><span class=3D"" style=3D"wh=
ite-space:pre">	</span>at org.apache.batik.svggen.ImageHandlerBase64Encoder=
.handleHREF(Unknown Source)</div><div><span class=3D"" style=3D"white-space=
:pre">	</span>at org.apache.batik.svggen.ImageHandlerBase64Encoder.handleHR=
EF(Unknown Source)</div><div><span class=3D"" style=3D"white-space:pre">	</=
span>at org.apache.batik.svggen.DefaultImageHandler.handleImage(Unknown Sou=
rce)</div><div><span class=3D"" style=3D"white-space:pre">	</span>at org.ap=
ache.batik.svggen.SimpleImageHandler.handleImage(Unknown Source)</div><div>=
<span class=3D"" style=3D"white-space:pre">	</span>at org.apache.batik.svgg=
en.SVGGraphics2D.drawImage(Unknown Source)</div><div><span class=3D"" style=
=3D"white-space:pre">	</span>at com.corp.util.image.ImageReadExample.main(I=
mageReadExample.java:49)</div></div><div><br></div><div>I am using Batik 1.=
8 with Java 1.8.0_91 on MacOS 10.10.5.</div><div><br></div>-- <br><div clas=
s=3D"gmail_signature"><div dir=3D"ltr">&quot;Hell hath no limits, nor is ci=
rcumscrib&#39;d In one self-place; but where we are is hell, And where hell=
 is, there must we ever be&quot; --Christopher Marlowe, <i>Doctor Faustus</=
i> (v. 121-24)</div></div>
</div></div>

--f46d0447862fa744fb0531bdc521--