生成GIF时是否累积亮度对比度?

时间:2014-12-17 06:41:13

标签: imagemagick imagemagick-convert

我正在从一系列JPEG中生成GIF。

我正在为每个图像使用亮度对比度选项,如下所示:

convert -loop 0 -layers optimize
-delay 10 thing1.jpg -brightness-contrast 5x5 
-delay 10 thing2.jpg -brightness-contrast 5x5
-delay 10 thing3.jpg -brightness-contrast 5x5
-delay 10 thing4.jpg -brightness-contrast 5x5
thing.gif

我注意到,亮度和对比度的变化似乎是累积应用的,第一张图像受影响最大。我正在寻找的是对所有图像应用相同的亮度 - 对比度调整,相反,第一个图像看起来增加了40%,第二个图像增加了30%等等。

有没有其他人经历过这个?有没有办法将相同的更改同等地应用于用于构建GIF的所有单个图像?

1 个答案:

答案 0 :(得分:2)

请参阅我对这些问题的回答:

由于-brightness-contrast图像操作符(不是图像设置),因此会立即应用于所有当前加载的图像(然后被遗忘):

  1. 当您将第一次时间应用时,只会加载thing1.jpg。操作员应用于这一个图像。

  2. 当您应用第二时,thing2.jpg已加载,但(已修改!)thing1.jpg仍然加载。操作员适用于这两个图像。

  3. 要解释您的+我的命令版本是如何工作的,请注意以下几点:

    • -loop 0 :是图片设置
    • -delay 10 :是图片设置
    • -brightness-contrast 5x5 :是图片运营商
    • -layers optimize :是图像序列运算符

    因此,你应该试试这个:

    convert -loop 0                  \
            -delay 10                \
             thing1.jpg              \
             thing2.jpg              \
             thing3.jpg              \
             thing4.jpg              \
            -brightness-contrast 5x5 \
            -layers optimize         \
             thing.gif
    

    如果您需要应用不同的值但非累积,分别控制每个级别的亮度 - 对比度,您应该使用\(.....\)包围'旁边' - 处理图像:

    convert -loop 0                                                 \
             \( thing1.jpg -delay 10  -brightness-contrast 5x5 \)   \
             \( thing2.jpg -delay 20  -brightness-contrast 10x20 \) \
             \( thing3.jpg -delay 100 -brightness-contrast 10% \)   \
             \( thing4.jpg -delay 1   -brightness-contrast 0x50 \)  \
            -layers optimize                                        \
             thing.gif