2013-02-10 68 views
2

我正在使用ImageMagick的Java端口JMagick。我需要能够创建新图像并将任意文本块写入其中。文档非常差,我设法获得远远是将文本写入来自IO的图像。另外,在所有示例中,我发现它似乎是在写入新图像数据之前的第一个操作,它总是将现有图像加载到ImageInfo实例中。如何用JMagick从头创建一个图像,然后在其中写入文本?使用JMagick从头开始创建图像

这是我现在做的事:

try { 

     ImageInfo info = new ImageInfo(); 
     info.setSize("512x512"); 
     info.setUnits(ResolutionType.PixelsPerInchResolution); 
     info.setColorspace(ColorspaceType.RGBColorspace); 
     info.setBorderColor(PixelPacket.queryColorDatabase("red")); 
     info.setDepth(8); 
     BufferedImage img = new BufferedImage(512,512,BufferedImage.TYPE_4BYTE_ABGR); 
     byte[] imageBytes = ((DataBufferByte) img.getData().getDataBuffer()).getData(); 
     MagickImage mimage = new MagickImage(info,imageBytes); 

     DrawInfo aInfo = new DrawInfo(info); 
     aInfo.setFill(PixelPacket.queryColorDatabase("green")); 
     aInfo.setUnderColor(PixelPacket.queryColorDatabase("yellow")); 
     aInfo.setOpacity(0); 
     aInfo.setPointsize(36); 
     aInfo.setFont("Arial"); 
     aInfo.setTextAntialias(true); 

     aInfo.setText("JMagick Tutorial"); 
     aInfo.setGeometry("+40+40"); 

     mimage.annotateImage(aInfo); 

     mimage.setFileName("text.jpg"); 
     mimage.writeImage(info); 


    } catch (MagickException ex) { 
     Logger.getLogger(LWJGL_IDOMOO_SIMPLE_TEST.class.getName()).log(Level.SEVERE, null, ex); 
    } 

它不工作时,JVM与访问冲突崩溃,因为它可能希望从IO输入图像。

+0

你最终解决了这个问题吗? – jarandaf 2013-09-13 19:13:01

+0

No.I离开它。切换到C++ – 2013-09-14 10:26:48

回答

1

我知道答案可能已经太迟了。在这里我写了这个简单的代码来创建一个你问的问题的场景。

private void createEmptyImage() throws MagickException{ 
    ImageInfo newImageiInfo=new ImageInfo(); 
    newImageiInfo.setFileName("src\\main\\resources\\test.jpg"); 
    newImageiInfo.setSize("512x512"); 
    newImageiInfo.setUnits(ResolutionType.PixelsPerInchResolution); 
    newImageiInfo.setColorspace(ColorspaceType.RGBColorspace); 
    newImageiInfo.setBorderColor(PixelPacket.queryColorDatabase("red")); 
    newImageiInfo.setDepth(8); 

    MagickImage addTextImage = new MagickImage(); 
    addTextImage.allocateImage(newImageiInfo); 
    addTextImage.setYResolution(480); 
    addTextImage.setXResolution(640); 
    addTextImage.writeImage(newImageiInfo); 


    DrawInfo aInfo = new DrawInfo(newImageiInfo); 

    aInfo.setFill(PixelPacket.queryColorDatabase("green")); 
    aInfo.setUnderColor(PixelPacket.queryColorDatabase("yellow")); 
    aInfo.setOpacity(0); 
    aInfo.setPointsize(36); 
    aInfo.setFont("Arial"); 
    aInfo.setTextAntialias(true); 
    aInfo.setText("JMagick Tutorial"); 
    aInfo.setGeometry("+50+50"); 

    addTextImage.annotateImage(aInfo); 
    addTextImage.setFileName("src\\main\\resources\\test-result.jpg"); 
    addTextImage.writeImage(newImageiInfo); 
}