PPM/PNG 到 GIF 的转换导致质量非常低
PPM/PNG to GIF conversion results in very low quality
我们正在编写的光线追踪器生成简单的 PPM 图像文件。我们写了一些为我们生成场景定义的东西,这样我们就可以用这些文件创建动画。
最初的工作流程是通过文件 > 脚本 > 将文件加载到堆栈 在 Photoshop 中打开所有文件,并将结果导出为 gif。这很好用,尽管工作流程很坎坷。质量很好,文件很大。
现在,当使用 ImageMagick 将 PPM 转换为 GIF 时,生成的图像质量非常糟糕。也就是说,ImageMagick制作的单个GIF文件质量已经很差了。将它们组合成 GIF 当然不会改变这一点。
原始文件(用 Photoshop 保存为 PNG):
GIF(使用 ImageMagick 从 PPM 转换而来):
(特别注意发光点周围的斑点)
我刚刚使用了 mogrify -path ../gif -format gif 006.ppm
作为结果。我真的不知道从哪里开始调整它(尽管我尝试了 reference 中的几个选项)。
进一步说明:
- 作为参考,这里有一些示例文件 (original ppm file, ImageMagick gif, …) to play with: https://github.com/kleinfreund/raytracer/tree/master/assets
- 通过 Photoshop 导出单个图像时质量非常好(选择性、漫反射抖动 100%、无透明度、256 色、无元数据)
- 使用 ImageMagick 将 PPM 文件批量转换为 PNG 时,质量也非常好
- 我对其他工作流程持开放态度,所以如果您也能提供替代解决方案,我很好
(两个文件之间差异的小动画,以便更容易看出问题。作者:Mark Setchell)
其他选项
另一种选择可能是转换为 MPG 格式,如下所示:
convert -delay 1 a-*png m2v:movie.mpg
或
convert -delay 1 a-*ppm m2v:movie.mpg
更新答案
我明白了 - 您必须为动画使用 GIF,所以 PNG 不是一个选项。也许您可以在不同的色彩空间中进行量化,例如Lab
色彩空间像这样:
convert orig.ppm -quantize Lab -colors 256 result.gif
其他选项可能是 YUV
、RGB
- 您可以使用
获得所有选项的列表
identify -list colorspace
原答案
问题是您的 PPM 文件包含的颜色多于 GIF 格式可以包含的颜色。您可以这样计算使用的颜色:
convert orig.ppm -print "%k\n" null:
642
这表明您的图片有 642 种颜色。
GIF 格式只允许 256 色的调色板 - reference。可以改用 PNG 格式吗?
我们正在编写的光线追踪器生成简单的 PPM 图像文件。我们写了一些为我们生成场景定义的东西,这样我们就可以用这些文件创建动画。
最初的工作流程是通过文件 > 脚本 > 将文件加载到堆栈 在 Photoshop 中打开所有文件,并将结果导出为 gif。这很好用,尽管工作流程很坎坷。质量很好,文件很大。
现在,当使用 ImageMagick 将 PPM 转换为 GIF 时,生成的图像质量非常糟糕。也就是说,ImageMagick制作的单个GIF文件质量已经很差了。将它们组合成 GIF 当然不会改变这一点。
原始文件(用 Photoshop 保存为 PNG):
GIF(使用 ImageMagick 从 PPM 转换而来):
(特别注意发光点周围的斑点)
我刚刚使用了 mogrify -path ../gif -format gif 006.ppm
作为结果。我真的不知道从哪里开始调整它(尽管我尝试了 reference 中的几个选项)。
进一步说明:
- 作为参考,这里有一些示例文件 (original ppm file, ImageMagick gif, …) to play with: https://github.com/kleinfreund/raytracer/tree/master/assets
- 通过 Photoshop 导出单个图像时质量非常好(选择性、漫反射抖动 100%、无透明度、256 色、无元数据)
- 使用 ImageMagick 将 PPM 文件批量转换为 PNG 时,质量也非常好
- 我对其他工作流程持开放态度,所以如果您也能提供替代解决方案,我很好
(两个文件之间差异的小动画,以便更容易看出问题。作者:Mark Setchell)
其他选项
另一种选择可能是转换为 MPG 格式,如下所示:
convert -delay 1 a-*png m2v:movie.mpg
或
convert -delay 1 a-*ppm m2v:movie.mpg
更新答案
我明白了 - 您必须为动画使用 GIF,所以 PNG 不是一个选项。也许您可以在不同的色彩空间中进行量化,例如Lab
色彩空间像这样:
convert orig.ppm -quantize Lab -colors 256 result.gif
其他选项可能是 YUV
、RGB
- 您可以使用
identify -list colorspace
原答案
问题是您的 PPM 文件包含的颜色多于 GIF 格式可以包含的颜色。您可以这样计算使用的颜色:
convert orig.ppm -print "%k\n" null:
642
这表明您的图片有 642 种颜色。
GIF 格式只允许 256 色的调色板 - reference。可以改用 PNG 格式吗?