2013-02-10 31 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); 
}