这是输入的 tiff 图像,我想将其转换为 JPG/PNG。googledrive 链接到下载示例
作为一般经验法则,我总是使用以下命令在 2 种图像格式之间进行转换(主要是 JPG 到 PNG )。convert input.jpg out.png
但:
convert input.tiff out.png
产生以下图像。您能否指出为什么将 TIF 转换为 PNG 无法正常工作。这与色彩空间/压缩有关吗?
以防万一:$identify input.tiff
给
input.tiff TIFF 640x480 640x480+0+0 8-bit YCbCr 619120B 0.000u 0:00.000
此外,有关如何制作图像的更多信息:
ffmpeg -hide_banner -loglevel error -y -f video4linux2 -i /dev/video0 -vframes 1 fname.tiff;
重要的
YCbCr
一点是:该色彩空间(它是视频色彩空间,而不是 RGB)没有被转换,因此您生成的 PNG 在某处具有色彩空间注释,而您的 PNG 查看器不遵守此注释,或者您的convert
有错误并且没有t 进行色彩空间转换,即使它需要。convert
有-colorspace
选项,所以我要尝试的第一件事是明确设置源颜色空间和目标颜色空间,看看它是否以这种方式转换它们。此外,由于输入图片似乎是黑白的,请考虑转换为灰度 PNG(只需要 Y 或强度通道)。
由于色彩空间信息是 TIFF 的一部分(这部分是 T 代表的:文件中有关于图像结构的实际信息,它被标记为 ),这意味着您的转换做错了什么(或者,您的输入文件以您的其他观众可以“错误地”处理“成功”的方式被破坏)。
因此,解决方法:不要使用
convert
/imagemagick(这也是 Web 历史上最大的服务器漏洞来源之一)。无论如何,根据我的经验,它的速度非常慢。econvert
从ExactImage项目中尝试。除此之外,Python PIL / Pillow 可能工作得很好;这实际上是他们教程中的第一个示例(修改最少);将此保存到文本文件中,将其标记为可执行文件并将其用于您的文件。
我找到的解决方案是,首先转换
YCbCr
为RGBA
使用tiff2rgba。(包含在libtiff
包装中)。然后将该 RGB tiff 转换为任何其他格式。附加信息:
如果您有更紧凑的答案,例如仅使用
imagemagick
withouttiff2rgba
,或者甚至知道为什么会发生这种情况,请随时分享。谢谢你。