【问题标题】:imagick convert png to jpg in java with im4javaimagick 使用 im4java 在 java 中将 png 转换为 jpg
【发布时间】:2012-04-25 11:29:05
【问题描述】:

我需要从 PNG 转换为 JPG。

但是,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);

但是,图像仍然是黑色背景。

我错过了什么?

【问题讨论】:

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

标签: java imagick im4java


【解决方案1】:

我不得不这样写代码:

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

【讨论】:

    【解决方案2】:

    应该不需要调用background。根据documentation,默认背景是白色,这对我来说可能是您的一张图片的黑色背景覆盖/阻止了默认设置(可能是brandingURL 的那张?)。

    引用上述 ImageMagick 链接文档:

    -背景颜色

    设置背景颜色。

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

    如果您使用它正是因为其中一张图片确实指定了(黑色)背景,我建议您将background 调用移到添加该图片之前或末尾操作(不确定 ImageMagick 是如何操作的)

    【讨论】:

    • 我确定它的某处没有黑色背景
    猜你喜欢
    • 2011-09-30
    • 2012-09-13
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2017-07-26
    相关资源
    最近更新 更多