我一直在做一些实验,但我不确定这个答案是否正确。我会让Fred、Eric和Glenn (@GlennRandersPehrson)看到它,也许他们可以纠正或评论它。我也不明白为什么会出现这种情况:
convert start.png -set png:gAMA 2 -verbose info: | grep -i -C5 gam
与此不同的是:
convert start.png -set png:gAMA 2 tmp.png
identify -verbose tmp.png | grep -i -C5 gam
我想我知道发生了什么-简而言之,我认为PNG编码器没有正确地捕捉到伽马值。
让我们制作一个单像素值为100的图像,以便在变换时看到它发生了什么:
convert xc:"gray(100)" start.png
让我们检查它:
convert start.png txt:
0,0: (25700)
是的,它绝对是100。让我们检查伽马值:
identify -verbose start.png | grep -i gam
Gamma: 0.45455
png:gAMA: gamma=0.45455 (See Gamma, above)
现在让我们改变伽马参数,可以使用我的方法或者Fred (@fmw42)的方法:
convert start.png +gamma 2 -verbose info: | grep -i gam
Gamma: 2
png:gAMA: gamma=0.45455 (See Gamma, above)
convert start.png +gamma 2 txt:
0,0: (25700)
convert start.png -set gamma 2 -verbose info: | grep -i gam
Gamma: 2
png:gAMA: gamma=0.45455 (See Gamma, above)
convert start.png -set gamma 2 txt:
0,0: (25700)
正如您所看到的,这两种方式都没有改变像素值本身,两种方式都改变了ImageMagick内部伽马值,但关键是它们都没有完成您需要的任务,即更改PNG编码器的伽马值。一些实验表明您需要:
convert start.png -set png:gAMA 2 -verbose info: | grep -i gam
Gamma: 0.45455
png:gAMA: 2
所以,我认为这就是答案——即使用:
。
convert input.png -set png:gAMA XYZ result.png
仅供未来读者参考,如果您想更改像素值本身而不仅仅是伽马参数,请执行以下操作:
convert start.png -gamma 2 txt:
0,0: (41039.6)
convert start.png -gamma 0.5 txt:
0,0: (10078.4)
$ convert orig.png -gamma 0.227272 orig.png && convert orig.png -gamma 2.2 orig.png
但是处理后的图像不是我想要的。我写了一个额外的说明,请看一下 :) - ueneid