Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ImageMagick以不同的alpha形状处理JPG和GIF_Imagemagick_Png_Jpeg_Gif_Imagemagick Convert - Fatal编程技术网

ImageMagick以不同的alpha形状处理JPG和GIF

ImageMagick以不同的alpha形状处理JPG和GIF,imagemagick,png,jpeg,gif,imagemagick-convert,Imagemagick,Png,Jpeg,Gif,Imagemagick Convert,我刚刚在ImageMagick中遇到了意想不到的行为,我希望有人能向我解释一下 版本号 $ convert --version Version: ImageMagick 6.7.7-10 2013-02-25 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC Features: OpenMP 在Linux Mint 15 Olivia上运行(基于Ubuntu

我刚刚在ImageMagick中遇到了意想不到的行为,我希望有人能向我解释一下

版本号

$ convert --version
Version: ImageMagick 6.7.7-10 2013-02-25 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP    
在Linux Mint 15 Olivia上运行(基于Ubuntu 13.04“Raring Ringtail”)

执行摘要

对两个应该非常相似的图像运行相同的操作,除了一个是GIF而另一个是JPEG,结果输出完全不同。GIF显示为黑色,JPEG显示为白色

复制:

  • 转到并下载大象剪影作为
    elephant.jpg
  • 下载为
    DUCK1.gif
  • convert elephant.jpg-negate-alpha形状输出elephant.png
  • convert DUCK1.gif-negate-alpha形状输出duck.png
  • 比较
    output elephant.png
    output duck.png
    图像
有人能解释为什么这两个输出图像不同吗?为什么GIF鸭子在转换后变成黑色,而JPEG大象在转换后变成白色

冗长的解释

情况是这样的:我想拍摄一些黑白图像,把背景变成透明的,把前景变成不同的颜色。例如,从位于的大象轮廓开始(我将图像保存为
elephant.jpg
),我希望生成一个带有透明背景的.png和一个绿色、红色、黄色或任何我想要的颜色的大象

我用于执行此操作的命令是:

convert elephant.jpg -negate -alpha shape +level-colors ,green green-elephant.png
这正是我想要的。首先,它反转图像,使背景为黑色,大象为白色,因为
-alpha shape
需要一个alpha遮罩,其中黑色=完全透明,白色=完全不透明。然后,
-alpha shape
发挥了它的魔力,在透明的背景下产生了一个白象。然后,
+级别颜色,绿色
开始,将黑白渐变转换为指定为
+级别颜色
参数的两种颜色;在这里,第一种颜色被省略,因此它将保持黑色,第二种颜色是白色变成的颜色。这就产生了一个边界光滑的绿色大象——这正是我想要的结果——我对此非常满意

接下来,我尝试对中的一个图像运行相同的命令(我使用了
DUCK1.gif
)。输入源是相同的——白色背景下的黑色轮廓——所以我期望得到相同的结果,透明背景下的绿色鸭子。但它不起作用。一项小小的研究表明,
-alpha-shape
的行为有所不同。JPEG大象在透明背景下生成白象,而GIF鸭子在透明背景下生成黑鸭子。换句话说,
-alpha shape
使用GIF图像源反转结果,而不是JPEG图像源。因此,为了给动物正确上色,我需要重写
+level colors
参数,将“绿色”放在逗号之前,而不是后面


调整我的脚本一点问题都没有,但我很想理解为什么会发生这种情况,到目前为止我还不清楚。有人能解释一下为什么ImageMagick在
-alpha shape
操作中对GIF和JPEG的处理如此不同吗?

好的,我想是这样的。对于GIF,背景颜色可能会被明确定义,我认为DUCK1.GIF就是这样。JPEG则不然;我认为,这里的背景是假定为“白色”

不管是什么情况,将DUCK1.GIF转换为DUCK1.JPG都会得到与大象相似的图像。此外,您可以确保与适当的Imagemagick选项使用相同的背景色。以下两个命令产生类似的输出:

convert DUCK1.jpg -background Black -negate -alpha shape output-duck.png
convert elephant.jpg -background Black -negate -alpha shape output-elephant.png

好吧,我想故事是这样的。对于GIF,背景颜色可能会被明确定义,我认为DUCK1.GIF就是这样。JPEG则不然;我认为,这里的背景是假定为“白色”

不管是什么情况,将DUCK1.GIF转换为DUCK1.JPG都会得到与大象相似的图像。此外,您可以确保与适当的Imagemagick选项使用相同的背景色。以下两个命令产生类似的输出:

convert DUCK1.jpg -background Black -negate -alpha shape output-duck.png
convert elephant.jpg -background Black -negate -alpha shape output-elephant.png

“您没有权限访问此服务器上的/public domain images/animal-screets/images/animal-screets-1.jpg。”嗯。我猜她的服务器会检查参考URL。试试看——这应该行得通,我会用这个URL更新我的帖子。“你没有权限在这个服务器上访问/public-domain-images/animal-screets/images/animal-screets-1.jpg。”嗯。我猜她的服务器会检查参考URL。试试看——这应该行得通,我会用这个URL更新我的帖子。就是这样。我查阅了GIF规范,然后用十六进制编辑器检查了文件,
DUCK1.GIF
将背景色显式设置为黑色。我将它改为
DUCK2.gif
,在十六进制编辑器中将背景色改为白色,同时不触摸其他字节,它的行为开始与ImageMagick管道中的
elephant.jpg
完全相同。谢谢你弄明白了;这件事让我抓狂,就是这样。我查阅了GIF规范,然后用十六进制编辑器检查了文件,
DUCK1.GIF
将背景色显式设置为黑色。我将它改为
DUCK2.gif
,在十六进制编辑器中将背景色改为白色,同时不触摸其他字节,它的行为开始与ImageMagick管道中的
elephant.jpg
完全相同。谢谢你弄明白了;这件事真让我抓狂。