2012-04-25 54 views
3

我需要从PNG转换JPG。imagick将png转换为jpg,在java中用im4java

但是,iMagick添加了黑色背景。

我看到这个question这是PHP,并试图写相同的Java这样的:

// create the a jpg image 
ConvertCmd cmd = new ConvertCmd(); 
// create the operation, add images and operators/options 
IMOperation op = new IMOperation(); 
op.addImage(brandingURL); 
op.format("JPEG"); 
op.composite(); 
op.background("white"); 
op.addImage(imageLocation); 
//op.transparent(); 
// execute the operation 
cmd.run(op); 

但尽管如此,图像出来一个黑色的背景。

我错过了什么?

+0

只是一个猜测:转换已经取代了PNG黑色的透明背景的背景设置为白色了。我假设白色背景然后被黑色背景覆盖。也许你不应该转换图像,而是将PNG绘制成相同大小的白色JPEG。 – Thomas 2012-04-25 12:01:28

+0

我该怎么办? – Dejell 2012-04-25 12:03:33

+0

我不是ImageMagick专家(你可能想参考它的文档 - 它可能是'draw'命令),但是用普通的Java图像io,你会创建一个'BufferedImage'并使用关联的Graphics对象来填充背景并在其上绘制PNG。 – Thomas 2012-04-25 12:18:45

回答

2

我不得不写这样的代码:

Info imageInfo = new Info(brandingURL, true); 
IMOperation op = new IMOperation(); 
op.addImage(brandingURL); 
op.size(imageInfo.getImageWidth(), imageInfo.getImageHeight()); 
op.addImage("xc:white", "c://write//test.jpeg"); 
op.addImage("c://write//test.jpeg"); 
CompositeCmd composite = new CompositeCmd(); 
composite.run(op); 
0

拨打电话background应该没有必要。根据documentation,默认背景是白色的,这对我来说可能是你的图片中有一个黑色背景会覆盖/阻止默认值(可能是brandingURL的那个?)。从ImageMagick的上述链接文档

引用:

-background颜色

设定背景色。

使用-fill选项下描述的格式指定颜色。默认的背景颜色(如果没有指定或在图像中找到)是白色的。

如果您正在使用它,正是因为其中一张图片指定(黑色)的背景下,我建议你移动background通话要么补充说,照片前或操作结束(不知道ImageMagick的是如何运作WRT本)

+0

我相信它没有黑色背景 – Dejell 2012-04-29 12:17:55