我认为ImageMagick是最好的选择,但如果您有其他可以编写脚本的建议,请告诉我。
我正在尝试用单个图块替换图像的所有32x32图块。这是原始图像的示例:
这是我想用来替换原始图像上所有图块的图块:
这就是我想要的输出:
我从Stack Overflow上的其他帖子中发现,我可以使用ImageMagick的复合选项将图块叠加到原始图像上:
$ convert original.png tile.png -composite overlay.png
导致以下结果:
我假设通过了解原始图像尺寸,我可以多次手动覆盖图块。但有没有办法实现流程自动化。在我给出的示例图片中,我需要在原始的64x128图像上叠加图块8次。
如何使用ImageMagick或其他软件执行此操作?如果是ImageMagick,那么蒙太奇或复合命令会是更好的选择吗?
编辑:另外一个问题是,是否可以跳过完全透明的图块?
输入示例:
输出示例:
能够做这个部分并不是很重要,但会很好。
答案 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
这里我使用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.png
和singlered.png
:
你可以按照自己的意愿定位红色:
convert bluetiles.png \
singlered.png -geometry +0+32 -composite \
singlered.png -geometry +32+96 -composite result.png
鉴于bluewithtransparent.png
:
您可以将其透明度复制到新创建的图像,如下所示:
convert bluetiles.png \
singlered.png -geometry +0+32 -composite \
singlered.png -geometry +32+96 -composite \
\( bluewithtransparent.png -alpha extract \) -compose copyopacity -composite result.png