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 如何使用栅格分割图像并保留透明度边界框_Image Processing_Imagemagick_Bounding Box - Fatal编程技术网

Image processing 如何使用栅格分割图像并保留透明度边界框

Image processing 如何使用栅格分割图像并保留透明度边界框,image-processing,imagemagick,bounding-box,Image Processing,Imagemagick,Bounding Box,我有一些png图像,我想把它分成几个部分,比如网格或大小 但每个部分都应该具有与原始图像相同的边界框(透明度) 示例: 将图像分成两部分 原件:200 × 89 输出: 第1部分,巴布亚新几内亚,200 × 89 part_2.png,200 × 89 ImageMagick可以这样做吗?或任何其他应用程序或方法 我的实际目标是分割成100多张图像 编辑: 另一个目标是对每个切片进行缩进。说indent=10px 示例: 输入:200 x 100 输出: 零件号1.png,20

我有一些png图像,我想把它分成几个部分,比如网格或大小

但每个部分都应该具有与原始图像相同的边界框(透明度)

示例:

将图像分成两部分

原件:200 × 89

输出:


第1部分,巴布亚新几内亚,200 × 89


part_2.png,200 × 89

ImageMagick可以这样做吗?或任何其他应用程序或方法

我的实际目标是分割成100多张图像


编辑:

另一个目标是对每个切片进行缩进。说
indent=10px

示例:

输入:200 x 100


输出:


零件号1.png,200 x 100


part_2.png,200 x 100

举个例子,为了直观地比较输入和输出:在Photoshop中,当一个图层添加到另一个图层上时,组合输出图像 200 x 100:

此外,这还显示了添加到组合中的输入图像(因此最好查看裁剪的内容和方式):


在ImageMagick中,可以使用-crop命令将图像分割为多个部分。对于上面包含两个部分的示例,您可以使用以下命令来完成。ImageMagick将附加-0,-1。。。输入输出文件名

ImageMagick 6:

dim=`convert image.png -format "%wx%h" info:`
convert \( -size $dim xc:none \) null: \( image.png -crop 50x100% \) -layers composite result.png

ImageMagick 7:

magick \( image.png -set option:dim "%wx%h" -crop 50x100% \) null: \( -size "%[dim]" xc:none \) -reverse -layers composite result.png

结果是:


请注意,-crop会保留虚拟画布信息,如果以后不添加+重新分页。因此,要将单个图像放回原始位置,必须将它们合成到输入大小的透明背景上。这可以在一个命令中使用-layers composite并使用null:separator来完成。

在ImageMagick中,可以使用-crop命令将图像分割为多个部分。对于上面包含两个部分的示例,您可以使用以下命令来完成。ImageMagick将附加-0,-1。。。输入输出文件名

ImageMagick 6:

dim=`convert image.png -format "%wx%h" info:`
convert \( -size $dim xc:none \) null: \( image.png -crop 50x100% \) -layers composite result.png

ImageMagick 7:

magick \( image.png -set option:dim "%wx%h" -crop 50x100% \) null: \( -size "%[dim]" xc:none \) -reverse -layers composite result.png

结果是:


请注意,-crop会保留虚拟画布信息,如果以后不添加+重新分页。因此,要将单个图像放回原始位置,必须将它们合成到输入大小的透明背景上。这可以在一个命令中使用-layers组合并使用null:separator来完成。

要回答您的新问题,可以使用脚本循环来完成。在类Unix平台上,假设映像没有空间,可以执行以下操作:

cd path/to/current_folder
list=`ls *.png`
for img in $list; do
name=`convert $img -format "%t" info:`
dim=`convert $img -format "%wx%h" info:`
convert \( -size $dim xc:none \) null: \( $img -crop 50x100% \) -layers composite -scene 1 path/to/new_folder/${name}_%d.png
done

如果要在输出中使用前导0,例如3,请使用path/to/new_folder/${name}uu%03d.png

请注意,为了从1而不是0开始,我添加了-scene1

对不起,我不知道如何为Windows编写脚本


请始终提供您的ImageMagick版本和平台。

要回答您的新问题,您可以通过脚本循环来完成。在类Unix平台上,假设映像没有空间,可以执行以下操作:

cd path/to/current_folder
list=`ls *.png`
for img in $list; do
name=`convert $img -format "%t" info:`
dim=`convert $img -format "%wx%h" info:`
convert \( -size $dim xc:none \) null: \( $img -crop 50x100% \) -layers composite -scene 1 path/to/new_folder/${name}_%d.png
done

如果要在输出中使用前导0,例如3,请使用path/to/new_folder/${name}uu%03d.png

请注意,为了从1而不是0开始,我添加了-scene1

对不起,我不知道如何为Windows编写脚本


请始终提供您的ImageMagick版本和平台。

在ImageMagick中,将透明区域放入图像的最佳方式是使用二进制遮罩,该遮罩放入图像的alpha通道中



您可以通过向遮罩添加更多白色区域或平铺一个黑色区域和一个白色区域来创建具有规则黑白间距的遮罩,从而添加任意数量的空白区域。

在ImageMagick中,将透明区域放入图像的最佳方法是使用二进制遮罩,该遮罩放入图像的alpha通道



您可以添加任意多的空白区域,方法是向遮罩添加更多的白色区域,或平铺一个黑色区域和一个白色区域,以创建具有规则黑白间距的遮罩。

编辑以添加此ImageMagick 6示例,该示例将输入图像分割为4个部分,即原始宽度的25%和高度的100%,然后为每个块创建一个与输入图像尺寸相同的透明画布,并将这些块定位在这些画布上的原始偏移处

convert input.png -set option:distort:viewport %[w]x%[h] -crop 25x100% \
   -virtual-pixel none -distort affine "0,0 %[fx:s.page.x],%[fx:s.page.y]" out%03d.png
输出文件名将从零开始编号,如“out000.png”等

原始消息

这里有一个使用ImageMagick 7的简单命令,它可以将图像裁剪成任意数量的片段,并在原始输入维度的透明背景上以原始偏移量输出所有片段

magick input.png -crop 100x1@ -background none \
   -extent "%[fx:s.page.width]x%[fx:s.page.height]-%[fx:s.page.x]-%[fx:s.page.y]" out%03d.png
这个“-crop 100x1@”告诉它将图像分割成一个100宽1高的网格。也可以将裁剪大小指定为百分比或像素数

再次编辑以添加:

下面的命令将把输入图像分割成使用“-crop”操作符指定的各个部分,然后从每个部分的每一侧刮除5个像素,然后在每个部分的每一侧应用5个像素的透明边框。它仍然会记住输入画布中片段的原始位置,因此“-扭曲仿射…”可以扩展画布并将片段放置在输入图像中的位置

convert input.png -set option:distort:viewport %[w]x%[h] \
   -bordercolor none -background none -virtual-pixel none \
   -crop 25x100% -shave 5x5 -border 5x5 \
   -distort affine "0,0 %[fx:s.page.x],%[fx:s.page.y]" out%03d.png

要在IM7中使用此命令,您需要将“convert”更改为“magick”。

编辑以添加此ImageMagick 6示例,该示例将输入图像拆分为4个部分,即原始宽度的25%和高度的100%,然后为每个部分创建一个与输入图像尺寸相同的透明画布,并在画布上的原始偏移处定位碎片

convert input.png -set option:distort:viewport %[w]x%[h] -crop 25x100% \
   -virtual-pixel none -distort affine "0,0 %[fx:s.page.x],%[fx:s.page.y]" out%03d.png
输出文件名将从零开始编号,如“out000.png”等