Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Image processing ImageMagick:检测完全透明的空白图像_Image Processing_Imagemagick - Fatal编程技术网

Image processing ImageMagick:检测完全透明的空白图像

Image processing ImageMagick:检测完全透明的空白图像,image-processing,imagemagick,Image Processing,Imagemagick,我正在使用ImageMagick 6将我的图像分割成多个部分。 所有操作都很完美,但如果我使用如下输入图像: 在输出时,我得到了一些完全透明的空图像,因为从输入图像来看,在它的角落里没有任何东西 是的,它应该是这样工作的,但是我正在寻找如何避免这种情况 或者从磁盘上删除空白图像,因为我不需要它们 如果没有正常的方法可以做到这一点 我也在考虑解决方法,比如检测完全空的图像并修改它们(填充颜色或其他任何颜色),这样之后我就可以在Finder中按修改日期对输出文件进行排序并手动删除它们 p、 我有

我正在使用ImageMagick 6将我的图像分割成多个部分。

所有操作都很完美,但如果我使用如下输入图像:

在输出时,我得到了一些完全透明的空图像,因为从输入图像来看,在它的角落里没有任何东西

是的,它应该是这样工作的,但是我正在寻找如何避免这种情况

或者从磁盘上删除空白图像,因为我不需要它们

如果没有正常的方法可以做到这一点

我也在考虑解决方法,比如检测完全空的图像并修改它们(填充颜色或其他任何颜色),这样之后我就可以在Finder中按修改日期对输出文件进行排序并手动删除它们


p、 我有2000 x 2000px大小的圆形图像,切片为5%,想象一下输出上的空图像数量。。手动删除它不仅仅是一件痛苦的事情。

您需要在Unix Imagemagick 6中编写一个脚本循环,如下所示。我已将您的输入图像放在我桌面上名为test的目录中。我不知道你为什么使用上面的命令,但它可以直接裁剪而不需要复合层。我将所有裁剪的图像保存到临时miff文件的层中,并在最后将其删除。基本思想是测试每个裁剪的图像,看看其alpha通道是否为纯黑色(或接近纯黑色,以避免微小的非常透明的单个像素)

1) 如果在某个小阈值内为黑色,则从miff层移除alpha通道,并将其保存为黑色编号的输出图像。否则,只需将图层另存为带编号的输出图像即可

cd
cd desktop/test
convert image.png -background black -alpha background -crop 10x10% image.miff
num=`convert image.miff -format "%n\n" info: | head -n 1`
for ((i=0; i<num; i++)); do
trans_test=`convert image.miff[$i] -alpha extract -scale 1x1! -format "%[fx:mean<=0.0001?0:1]" info:`
echo "i=$i test=$trans_test"
if [ $trans_test -eq 0 ]; then
convert image.miff[$i] -alpha off result-$i.png
else
convert image.miff[$i] result-$i.png
fi
done
rm -f image.miff
cd
cd
cd桌面/测试
转换image.png-背景黑色-alpha背景-裁剪10x10%image.miff
num=`convert image.miff-格式“%n\n”信息:|头-n 1`

为了((i=0;i@fmw42你能看一下吗?提前谢谢你。你能让我更好地理解你对输出的期望吗?你能手动拆分它以显示结果部分吗?我用这个问题中的代码来显示给定的图像。这里有一个包含该图像和输出文件的文件夹:你可以看到完全空白的图像。据我所知,那里有Imagemagick-crop中没有忽略完全透明的平铺的选项。您必须测试每个平铺是否完全透明,然后丢弃它。如果此命令的结果为灰色(0),您可以判断平铺是否完全透明:
convert result-0.png-背景黑色-alpha背景-alpha提取-scale 1x1!-格式“%[pixel:u.p]“信息:
@fmw42,可以检测到它很酷,但正如我所说,我至少有2000个这样的精灵,所以Imagemagick可以检测到空的并填充黑色吗?这对我真的很有帮助。”我不确定你为什么使用上面的命令,但它可以直接裁剪而不需要合成层-这是你的答案,我使用了它,它非常有效:)
cd
cd desktop/test
convert image.png -background black -alpha background -crop 10x10% image.miff
num=`convert image.miff -format "%n\n" info: | head -n 1`
for ((i=0; i<num; i++)); do
trans_test=`convert image.miff[$i] -alpha extract -scale 1x1! -format "%[fx:mean<=0.0001?0:1]" info:`
echo "i=$i test=$trans_test"
if [ $trans_test -eq 0 ]; then
convert image.miff[$i] -alpha off result-$i.png
else
convert image.miff[$i] result-$i.png
fi
done
rm -f image.miff
cd
cd
cd desktop/test
convert image.png -background black -alpha background -crop 10x10% image.miff
num=`convert image.miff -format "%n\n" info: | head -n 1`
for ((i=0; i<num; i++)); do
trans_test=`convert image.miff[$i] -alpha extract -scale 1x1! -format "%[fx:mean<=0.0001?0:1]" info:`
echo "i=$i test=$trans_test"
if [ $trans_test -eq 1 ]; then
convert image.miff[$i] result-$i.png
fi
done
rm -f image.miff
cd
cd
cd desktop/test
j=0
convert image.png -background black -alpha background -crop 10x10% image.miff
num=`convert image.miff -format "%n\n" info: | head -n 1`
for ((i=0; i<num; i++)); do
trans_test=`convert image.miff[$i] -alpha extract -scale 1x1! -format "%[fx:mean<=0.0001?0:1]" info:`
echo "i=$i test=$trans_test"
if [ $trans_test -eq 1 ]; then
convert image.miff[$i] result-$j.png
j=$((j+1))
fi
done
rm -f image.miff
cd
cd
cd desktop/test
j=0
convert image.png -background black -alpha background -crop 10x10% image.miff
num=`convert image.miff -format "%n\n" info: | head -n 1`
for ((i=0; i<num; i++)); do
trans_test=`convert image.miff[$i] -alpha extract -scale 1x1! -format "%[fx:mean<=0.0001?0:1]" info:`
echo "i=$i test=$trans_test"
if [ $trans_test -eq 1 ]; then
jj=`printf "%02d" $j`
convert image.miff[$i] result-$jj.png
j=$((j+1))
fi
done
rm -f image.miff
cd