使用JMagick从头创建图像

3
我正在使用ImageMagick的Java版本JMagick。我需要能够创建一个新的图像,并将任意文本块写入其中。文档非常简陋,到目前为止,我所能得到的只是从IO中写入图像的文本。此外,在我找到的所有示例中,似乎在编写新图像数据之前,第一步操作总是将现有图像加载到ImageInfo实例中。如何使用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中获取输入图像。


你最终解决了这个问题吗? - jarandaf
不,我放弃了它。转向了C++。 - Michael IV
2个回答

3

我知道回答可能有点晚了。这里我写了一段简单的代码来创建你所要求的场景!

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);
}

0

这里是一个使用JMagick创建蓝色图像的Clojure示例:

(import '[magick MagickImage ImageInfo ColorspaceType])
(def image (MagickImage.))
(.constituteImage image 256 256 "RGB" (byte-array (take (* 3 256 256) (cycle [0 0 255]))))
(def info (ImageInfo.))
(.setSize info "256x256")
(.setDepth info 8)
(.setColorspace info ColorspaceType/RGBColorspace)
(.setFileName image "test.jpg")
(.writeImage image info)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接