使用 ImageMagick 在 canvas 上叠加多个不同大小的 PNG 图像
Overlaying multiple PNG images of different sizes on a canvas using ImageMagick
我想使用 ImageMagick 在透明 canvas 上叠加多个不同大小的 PNG 图像。首先,我创建了一个固定大小的透明 canvas,比如
convert -size 1500x1000 canvas:transparent PNG32:canvas.png
然后我遍历我的图像,以便将每个图像添加到 canvas
convert canvas.png nthimage.png -gravity Center -geometry xResxYres+xcoord+ycoord -composite canvas.png
这很好用,但我可能会叠加多达 10 张图片,并且我对数千个 n 元组图像执行此操作,因此我们将不胜感激更快的解决方案。所以我的问题是:我是否也可以一步完成此操作,而不是先创建 canvas 然后一次添加一个图像?
编辑:我在 macOS 10.15.7 上使用 ImageMagick 7.0.11-13。我在 python 脚本中 运行 ImageMagick,因此如果需要,可以生成包含输入文件列表的文件。具体来说,假设我的输入文件 file_1.png
到 file_n.png
大小 A1xB1
到 AnxBn
并且应该放置在坐标 +X1+Y1
到 [=18] =] 相对于 canvas 的中心,输出文件为 output.png,大小应为 1500x1000。
我真的不建议从 Python 中取出子进程来调用 ImageMagick 数千次。您最终会在每个图像中包含太多的进程创建开销,如果您已经 运行 Python 可以进行图像处理 “内部”[=24],那么这是毫无意义的=].
我建议你直接从 Python 使用 PIL 或 OpenCV,因为你的 Mac 肯定是多核的,我建议你也使用多处理,因为做的任务数以千计的图像是可以并行化的。
由于您没有真正说明您的元组实际是什么样子,也没有说明如何确定输出文件名,我只能向您指出 this 答案中的方法 7 和 8。
您对每个图像的处理函数将要创建一个新的透明图像,然后打开并粘贴其他图像:
from PIL import Image
canvas = Image.new('RGBA', SOMETHING)
for overlay in overlays:
im = Image.open(overlay)
canvas.paste(im, (SOMEWHERE))
canvas.save(something)
文档 here.
我想使用 ImageMagick 在透明 canvas 上叠加多个不同大小的 PNG 图像。首先,我创建了一个固定大小的透明 canvas,比如
convert -size 1500x1000 canvas:transparent PNG32:canvas.png
然后我遍历我的图像,以便将每个图像添加到 canvas
convert canvas.png nthimage.png -gravity Center -geometry xResxYres+xcoord+ycoord -composite canvas.png
这很好用,但我可能会叠加多达 10 张图片,并且我对数千个 n 元组图像执行此操作,因此我们将不胜感激更快的解决方案。所以我的问题是:我是否也可以一步完成此操作,而不是先创建 canvas 然后一次添加一个图像?
编辑:我在 macOS 10.15.7 上使用 ImageMagick 7.0.11-13。我在 python 脚本中 运行 ImageMagick,因此如果需要,可以生成包含输入文件列表的文件。具体来说,假设我的输入文件 file_1.png
到 file_n.png
大小 A1xB1
到 AnxBn
并且应该放置在坐标 +X1+Y1
到 [=18] =] 相对于 canvas 的中心,输出文件为 output.png,大小应为 1500x1000。
我真的不建议从 Python 中取出子进程来调用 ImageMagick 数千次。您最终会在每个图像中包含太多的进程创建开销,如果您已经 运行 Python 可以进行图像处理 “内部”[=24],那么这是毫无意义的=].
我建议你直接从 Python 使用 PIL 或 OpenCV,因为你的 Mac 肯定是多核的,我建议你也使用多处理,因为做的任务数以千计的图像是可以并行化的。
由于您没有真正说明您的元组实际是什么样子,也没有说明如何确定输出文件名,我只能向您指出 this 答案中的方法 7 和 8。
您对每个图像的处理函数将要创建一个新的透明图像,然后打开并粘贴其他图像:
from PIL import Image
canvas = Image.new('RGBA', SOMETHING)
for overlay in overlays:
im = Image.open(overlay)
canvas.paste(im, (SOMEWHERE))
canvas.save(something)
文档 here.