将PNG合成到JPEG上失败(颜色全部呈现为黑色)仅在一个特定的JPEG文件上

时间:2012-02-04 15:30:57

标签: ruby png jpeg rmagick composite

我正在构建一个使用Ruby + RMagick将PNG图像合成到各种JPEG背景上的应用程序。一切正常,但是我们找到了一个特定的JPEG背景,PNG被合成为黑点。 PNG透明度受到尊重; “斑点”的形状是正确的,但颜色正在消失并变黑。

我尝试了很多JPEG试图找到另一个产生相同结果的JPEG,但(到目前为止)都失败了。

我怀疑它可能与相关JPEG文件的位深度或其他参数有关。我一直在网上搜索,寻找一个可以分析这个JPEG的工具,并告诉我所有可能相关的参数,但还没有找到任何参数。

  1. 有没有这样的事发生在你身上?原因是什么?
  2. 根据您对JPEG格式的了解,还有其他可能相关的参数吗?
  3. 您知道有哪些工具可以分析JPEG文件,并告诉我位深度和其他参数?或者如果我在十六进制编辑器中打开JPEG,你能告诉我如何找到这些信息吗?

1 个答案:

答案 0 :(得分:0)

我仍然没有发现复合操作无法正常工作的那个JPG的特殊之处,但我使用此代码解决了这个问题:

back  = Magick::Image.from_blob(jpg_data).first
png   = Magick::Image.from_blob(png_data).first
page1 = Magick::Image.new(back.columns, back.rows)
page1.composite!(back, 0, 0, Magick::OverCompositeOp)
page1.composite!(png, png_x, png_y, Magick::OverCompositeOp)

而不是:

back  = Magick::Image.from_blob(jpg_data).first
png   = Magick::Image.from_blob(png_data).first
page1 = back.composite(png, png_x, png_y, Magick::OverCompositeOp)