ImageMagick:用单个平铺替换所有图像平铺

时间:2018-03-21 00:56:31

标签: imagemagick overlay placeholder tile tiling

我认为ImageMagick是最好的选择,但如果您有其他可以编写脚本的建议,请告诉我。

我正在尝试用单个图块替换图像的所有32x32图块。这是原始图像的示例:

Original

这是我想用来替换原始图像上所有图块的图块:

Placeholder tile

这就是我想要的输出:

Placeholder image

我从Stack Overflow上的其他帖子中发现,我可以使用ImageMagick的复合选项将图块叠加到原始图像上:

$ convert original.png tile.png -composite overlay.png

导致以下结果:

Overlay

我假设通过了解原始图像尺寸,我可以多次手动覆盖图块。但有没有办法实现流程自动化。在我给出的示例图片中,我需要在原始的64x128图像上叠加图块8次。

如何使用ImageMagick或其他软件执行此操作?如果是ImageMagick,那么蒙太奇复合命令会是更好的选择吗?

编辑:另外一个问题是,是否可以跳过完全透明的图块?

输入示例:

Original transparent

输出示例:

Placeholder transparent

能够做这个部分并不是很重要,但会很好。

3 个答案:

答案 0 :(得分:3)

我不知道为什么你需要在原版上叠加8个瓷砖。只需从头创建它,并将输出命名为与原始

相同

您可以使用Imagemagick蒙太奇来执行此操作(unix语法):

montage Ro1Lp.png Ro1Lp.png Ro1Lp.png Ro1Lp.png Ro1Lp.png Ro1Lp.png Ro1Lp.png Ro1Lp.png -tile 2x8 -geometry +0+0 result.png


enter image description here

这里我使用convert来复制tile,但它使用了一个相对当前的重复功能。如果你没有足够的Imagemagick版本,那么只需在蒙太奇中重复拼贴,如下所示:

{{1}}


答案 1 :(得分:3)

如果拼贴图像均匀地适合原件的尺寸,这样的命令应该可以完成你想要的大部分......

convert original.png tile.png -background none -virtual-pixel tile \
   -set option:distort:viewport %[fx:u.w]x%[fx:u.h] -distort SRT 0 +swap \
   -compose copyopacity -composite overlay.png

读取两张图片。然后它创建另一个原始大小的画布,并填充多个平铺图像副本。然后它使用原件作为透明蒙版来创建新的平铺图像的副本,其中透明单元格与原始图像相同。

答案 2 :(得分:0)

正如Fred(fmw42)所说,"为什么不从头开始创建整个图像?"

也许你的描述并不完整,所以这里还有一些可以帮助你解决的问题。

给定bluetiles.pngsinglered.png

enter image description here enter image description here

你可以按照自己的意愿定位红色:

convert bluetiles.png \
   singlered.png -geometry +0+32  -composite \
   singlered.png -geometry +32+96 -composite result.png

enter image description here

鉴于bluewithtransparent.png

enter image description here

您可以将其透明度复制到新创建的图像,如下所示:

convert bluetiles.png \
   singlered.png -geometry +0+32  -composite \
   singlered.png -geometry +32+96 -composite \
\( bluewithtransparent.png -alpha extract \) -compose copyopacity -composite result.png

enter image description here