PPM / PNG到GIF转换导致质量非常低

时间:2015-08-29 11:08:35

标签: imagemagick gif imagemagick-convert

我们正在编程的光线跟踪器生成简单的PPM图像文件。我们写了一些为我们生成场景定义的东西,以便我们可以用这些文件创建动画。

最初的工作流程是通过 File>打开Photoshop中的所有文件。脚本>将文件加载到堆栈并将结果导出为gif。虽然工作流程很崎岖,但效果很好。质量很好,文件大小很大。

现在,当使用ImageMagick从PPM转换为GIF时,生成的图像的质量非常糟糕。也就是说,ImageMagick生成的单个 GIF文件的质量已经很糟糕了。将它们与GIF结合起来当然不会改变它。

原始文件(使用Photoshop保存为PNG):

Test file saved as PNG with Photoshop

GIF(使用ImageMagick从PPM转换):

Test file converted from PPM with ImageMagick

(特别注意光线发出点周围的斑点)

我刚刚使用mogrify -path ../gif -format gif 006.ppm来获得该结果。我真的不知道从哪里开始调整这个(尽管我使用了reference中的几个选项)。

进一步说明:

  • 供参考,以下是一些示例文件(original ppm file,ImageMagick gif,...):https://github.com/kleinfreund/raytracer/tree/master/assets
  • 通过Photoshop导出单个图像时质量非常好(选择性,漫反射抖动100%,无透明度,256色,无元数据)
  • 使用ImageMagick将PPM文件批量转换为PNG时,质量也非常好。
  • 我对其他工作流程持开放态度,所以如果你能提供替代解决方案我也没关系

Comparison 1

(一个关于两个文件之间差异的动画,所以问题更容易看到。作者:Mark Setchell)

Comparison 2

1 个答案:

答案 0 :(得分:2)

其他选项

另一种选择可能是转换为MPG格式,如下所示:

convert -delay 1 a-*png m2v:movie.mpg

convert -delay 1 a-*ppm m2v:movie.mpg

更新了答案

我明白了 - 你必须为动画使用GIF,所以PNG不是一个选择。也许你可以在不同的颜色空间中进行量化,例如对Lab colorspace:

这样
convert orig.ppm -quantize Lab -colors 256 result.gif

其他选项可能是YUVRGB - 您可以使用

获取所有选项的列表
identify -list colorspace

原始答案

问题是您的PPM文件的颜色多于GIF格式可以包含的颜色。您可以像这样计算使用的颜色:

convert orig.ppm -print "%k\n" null:
642

显示您的图片有642种颜色。

GIF格式包含256种颜色的调色板 - reference。你可以改用PNG格式吗?