Imagemagick深度转换

9

有一个图片 in.png。现在进行以下操作:

$ convert in.png -strip out.tiff     #convert to tiff
$ convert out.tiff -strip out.png    #and back
$ cmp in.png out.png
$#no output - the images has no difference - theyre same

$ identify in.png out.png
in.png PNG 300x300 300x300+0+0 16-bit sRGB 1.65KB 0.000u 0:00.000
out.png[1] PNG 300x300 300x300+0+0 16-bit sRGB 1.65KB 0.000u 0:00.000

现在尝试使用eps。因此:

$ convert in.png -strip out2.eps        #convert to eps
$ convert out2.eps -strip out2.png      #back

而且这些图片是不同的。

$ identify in.png out.png out2.png
in.png PNG 300x300 300x300+0+0 16-bit sRGB 1.65KB 0.000u 0:00.000
out.png[1] PNG 300x300 300x300+0+0 16-bit sRGB 1.65KB 0.000u 0:00.000
out2.png[2] PNG 300x300 300x300+0+0 8-bit sRGB 4c 321B 0.000u 0:00.009

正如您所看到的,将eps转换为png会创建8位png。

有趣的是 - EPS是16位!

$ identify out2.eps 
out2.eps PS 300x300 300x300+0+0 16-bit sRGB 1.42KB 0.000u 0:00.000

问题:

  • 为什么转换 eps->png 会改变位深度?
  • 如何从 eps 转换为 png 并获得 16 位的 png?(与 tiff 相同)。

编辑

测试了 @Rachel 的建议:

$ convert out2.eps -depth 16 out3.png
$ identify out3.png 
out3.png PNG 300x300 300x300+0+0 8-bit sRGB 4c 518B 0.000u 0:00.000

再次提及 8 位。

我的 ImageMagick 版本:

$ convert --version
Version: ImageMagick 6.8.9-1 Q16 x86_64 2014-06-01 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules
Delegates: bzlib djvu fftw fontconfig freetype gslib gvc jng jp2 jpeg lcms ltdl lzma pangocairo png ps tiff webp wmf x xml zlib

如果有人想测试,这是我的测试图片: test image 最终结论是,@Mark Setchell和@Rachel Gallen的建议都很好。@Mark的命令有效,关键是PNG48。
$ convert out2.eps -depth 16 PNG48:out7.png
$ identify out7.png
out7.png PNG 300x300 300x300+0+0 16-bit sRGB 1.86KB 0.000u 0:00.000

最后,16位png格式。我将在另一个问题中提出询问,为什么会出现下面的情况:

$ mogrify -strip out7.png
$ identify out7.png 
out7.png PNG 300x300 300x300+0+0 8-bit sRGB 4c 321B 0.000u 0:00.000

再次回到8位。而-strip应该仅删除元数据,不应更改图像本身。


你没有加入PNG16选项。 - Rachel Gallen
2个回答

10

我认为你需要类似以下的内容才能获得16位PNG图像

convert a.png -depth 16 PNG48:b.png

那么应该先将eps->png转换为8位,并再次从8位PNG转换为16位PNG吗?这是否意味着在eps->png的过程中会有损失? - clt60
我只是在阐述一个概念,即生成16(或48位)PNG。我认为您可以直接将这些参数和开关放到EPS-> PNG转换中。 - Mark Setchell
好的 - 再次进行测试。 - clt60

2
我认为从查看文档中,你可以做到。
   convert -depth 16 image.eps image2.png[16]

语法是什么。
   convert [ options … ] file [file …] file

这段话的意思是:“这个网站说:在文件名后面使用方括号来指定多分辨率图像格式(比如Photo CD)中所需的子图像(例如img0001.pcd[4]),或者指定MPEG图像的范围(例如video.mpg[50-75])。因此,也许可以在image2.png后面加上[16]。”

它创建了一个名为PNG16:out6.png的文件,而且identify打印出:PNG16:out6.png PNG 300x300 300x300+0+0 8-bit sRGB 4c 518B 0.000u 0:00.000。我的ImageMagick有问题吗? - clt60
是的,我尝试了很多变体一个小时,但都没有得到好的结果。 - clt60
根据 https://sites.google.com/site/scientificsimulation/other-software/imagemagick ,ImageMagick 不支持16位PNG! - Rachel Gallen
嗯...但是从tiff文件的转换可以运行——请看第一个例子。 - clt60
1
好的,解决方案是使用PNG48而不是PNG16,正如@Mark所建议的。谢谢。 ;) - clt60
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接