Hi,

We have a huge svg of size

<svg width="3750" height="12245" xmlns="http://www.w3.org/2000/svg";>

How to optimse the below code for optimum memory.. say it should not take x times more memory than width etc.. i.e in case the api allows writing line by line of slice by slice converstion rather than entire width x height x y bytes metrics etc. This way, I hope memory requirements can be as low as possible through slice or line by line writing approach to give infinate size svg images conversion.

The code used is

TranscoderInput bInputSVG =newTranscoderInput(lInputReader);
TranscoderOutput  bOutputPNG =newTranscoderOutput(lOutputStream);
Transcoder bTranscoder = aTranscoderExt.getTranscoder();
bTranscoder.addTranscodingHint(ImageTranscoder.KEY_PIXEL_UNIT_TO_MILLIMETER,newFloat(0.256));
bTranscoder.addTranscodingHint(ImageTranscoder.KEY_BACKGROUND_COLOR, 
Color.white);
bTranscoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY,newFloat(1.0));
//bTranscoder.addTranscodingHint(ImageTranscoder.KEY_WIDTH, new 
Float(svgWidth));
bTranscoder.transcode(bInputSVG, bOutputPNG);


but we are getting out of memory error

java.lang.OutOfMemoryError: Java heap space
    at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:75)
    at java.awt.image.Raster.createPackedRaster(Raster.java:467)
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1032)
    at java.awt.image.BufferedImage.<init>(BufferedImage.java:340)
at org.apache.batik.transcoder.image.PNGTranscoder.createImage(PNGTranscoder.java:59) at org.apache.batik.transcoder.image.ImageTranscoder.transcode(ImageTranscoder.java:116) at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142) at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:156) at com.teja.svg.converter.java.utils.TranscodeUtils.doTranscode(TranscodeUtils.java:58) at com.teja.svg.converter.java.test.TestSVGPNGTranscoder.testTranscode(TestSVGPNGTranscoder.java:26)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)


Process finished with exit code -1

Any pointers to optimum api usage for least memory irrespective of svg image sizes would help a lot.

Regards
Nagendra
--

TejaSoft Innovations Pvt. Ltd. <http://www.tejasoft.com>

Raja Nagendra Kumar / Java Code Surgeon (Audit & Repair)
nagendra.r...@tejasoft.com <mailto:nagendra.r...@tejasoft.com>/ +91-9886723872

TejaSoft Innovations Pvt. Ltd.
+91-80-28436591
17c/17, Nandi Gardens, Sector-2, J.P Nagar 9th Phase, Avalahalli, Bangalore-560108, KA, IN
www.tejasoft.com <http://www.tejasoft.com>

Reply via email to