Java 使用JMagick从头开始创建图像
我正在使用名为ImageMagick的Java端口。我需要能够创建一个新图像并将任意文本块写入其中。文档非常糟糕,到目前为止,我设法将来自IO的文本写入图像。此外,在我发现的所有示例中,这似乎是写入新图像数据之前的第一个操作,总是将现有图像加载到ImageInfo实例中。如何使用JMagick从头开始创建图像,然后在其中写入文本 我现在做的是:Java 使用JMagick从头开始创建图像,java,imagemagick,jmagick,Java,Imagemagick,Jmagick,我正在使用名为ImageMagick的Java端口。我需要能够创建一个新图像并将任意文本块写入其中。文档非常糟糕,到目前为止,我设法将来自IO的文本写入图像。此外,在我发现的所有示例中,这似乎是写入新图像数据之前的第一个操作,总是将现有图像加载到ImageInfo实例中。如何使用JMagick从头开始创建图像,然后在其中写入文本 我现在做的是: try { ImageInfo info = new ImageInfo(); info.setSize("512x
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输入映像的预期。我知道现在回答这个问题可能已经太迟了。在这里,我编写了这个简单的代码来创建一个您所要求的场景
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);
}
下面是使用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)
你终于解决了这个问题吗?不,我把它忘了。切换到C++