使用im4java在Java中将PNG转换为JPG的Imagick方法

3

我需要将PNG转换为JPG。

但是,iMagick会给它添加黑色背景。

我看到了这个问题,它是关于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);

但是,图片仍然带有黑色背景。我错过了什么吗?

只不过是猜测:在将 PNG 的透明背景设置为白色之前,转换可能已经将其替换为了黑色。我假设白色背景随后会被黑色背景覆盖。也许你不应该转换图像,而是应该将 PNG 绘制到相同尺寸的白色 JPEG 上。 - Thomas
我并不是ImageMagick专家(您可能需要参考其文档 - 它可能是draw命令),但使用普通的Java图像io,您可以创建一个BufferedImage,并使用相关的Graphics对象来填充背景并在其上绘制PNG。 - Thomas
这不会对我有帮助,因为分辨率会很低。 - Dejell
你尝试过使用 javax.imageio.ImageIO 吗? - Samuel Audet
1
当然我尝试过,但是图片的质量太差了,所以我需要使用外部库。 - Dejell
2个回答

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应该是不必要的。根据文档,默认背景是白色,这表明您的某张图片可能有黑色背景覆盖/阻挡了默认背景(也许是在brandingURL处的那张图片?)。

引用上述链接的ImageMagick文档:

-background color

设置背景颜色。

颜色使用-fill选项下描述的格式指定。如果未指定或在图像中找不到背景颜色,则默认背景颜色为白色。

如果您之所以使用它是因为其中一张图片确实指定了(黑色)背景,则建议您将background调用移动到添加该图片之前或操作结束时(不确定ImageMagick在此方面的操作方式)。


我相信它某处没有黑色背景。 - Dejell

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