imagemagick - 如何使用 imagemagick 将相同的图像附加到多个图像
问题描述
您好,我想在多张图片的左侧添加同一张图片。第一个图像是一个图例,它对于我稍后想要蒙太奇 3x2 的所有 6 个图像都很常见。
我在蒙太奇之前在下面尝试了这个命令,但它不起作用。我想看看是否可以在不添加 for 循环的情况下使其工作,这会减慢代码的速度。
convert +append image_3_1.png image_1_[1-6].png -geometry +10+0 test.png
我希望将 image_3_1 添加到以 image_1 开头的所有 6 个图像中。有任何想法吗?
解决方案
您的问题不清楚:
- 您的输入和预期输出图像是什么样的或它们有多大,
- 无论你真的需要中间图像还是只是蒙太奇,
for
循环的实际问题是什么
所以这里有一些想法......
选项1
这个避免了for
循环和多次调用,magick
方法是使用单个magick
并仅加载side
一次图像并将其克隆到内存中:
magick side.png \
\( +clone image_1.png +append -write out_1.png +delete \) \
\( +clone image_2.png +append -write out_2.png +delete \) \
\( +clone image_3.png +append -write out_3.png +delete \) \
\( +clone image_4.png +append -write out_4.png +delete \) \
\( +clone image_5.png +append -write out_5.png +delete \) \
image_6.png +append out_6.png
它产生 6 个输出文件,如下所示:
选项 2
这个通过并行for
运行 6 个副本来避免循环:magick
magick side.png image_1.png +append out_1.png &
magick side.png image_2.png +append out_2.png &
magick side.png image_3.png +append out_3.png &
magick side.png image_4.png +append out_4.png &
magick side.png image_5.png +append out_5.png &
magick side.png image_6.png +append out_6.png &
wait
它产生与上面相同的 6 个输出文件。
选项 3
这通过使用GNU Parallel更简洁地完成同样的操作:
parallel magick side.png image_{}.png +append out_{}.png ::: {1..6}
选项 4
如果您不需要中间文件,只需要蒙太奇:
parallel -k magick side.png {} +append ppm:- ::: image_*png | magick montage -tile 2x3 -geometry +5+5 ppm:- montage.png
选项 5
这大致相同,避免产生中间输出文件,也避免使用GNU Parallel:
magick side.png \
\( +clone image_1.png +append -write ppm:- +delete \) \
\( +clone image_2.png +append -write ppm:- +delete \) \
\( +clone image_3.png +append -write ppm:- +delete \) \
\( +clone image_4.png +append -write ppm:- +delete \) \
\( +clone image_5.png +append -write ppm:- +delete \) \
image_6.png +append ppm:- | magick montage -background black -geometry +5+10 -tile 2x3 ppm:- montage.png
选项 6
这个不使用for
循环、单个进程、没有单独的montage
命令并且不生成中间文件:
magick side.png -write MPR:side +delete \
\( MPR:side image_1.png MPR:side image_2.png +append \) \
\( MPR:side image_3.png MPR:side image_4.png +append \) \
\( MPR:side image_5.png MPR:side image_6.png +append \) \
-append montage.png
将+append
and-append
替换为-smush以获得更多布局和图像间间距的灵活性。
选项 7
也许是这样的-smush
:
magick side.png -write MPR:side +delete -background cyan \
\( MPR:side image_1.png MPR:side image_2.png +smush 10 \) \
\( MPR:side image_3.png MPR:side image_4.png +smush 10 \) \
\( MPR:side image_5.png MPR:side image_6.png +smush 10 \) \
-smush 30 montage.png
我的猜测是,在大多数情况下,选项 6 在大多数机器上是最快的,如果它对您来说足够灵活的话。如果您需要更大的灵活性,请使用选项 7 或 5。
关键词:ImageMagick、图像处理、蒙太奇、布局、并行、smush。
推荐阅读
- java - 使用 WSS4J 签署 XML。没有 ID 为“noXMLSig”的消息
- css - 我可以设置元素的大小以适应其潜在内容,而不是其实际内容吗?
- java - 为什么这个对象在这个 ArrayList 中作为“未知类”出现?
- php - 如何将所有访问文件夹的尝试重定向到索引,但服务器?
- c++ - vk::DeviceQueueCreateFlags() 实际上做了什么?
- php - 使用控制器转到其他页面时 $row 值丢失
- laravel - 如何找到重定向到 oauth 客户端回调的引用者
- swift - 在 Swift 中,您能否创建一个协议,该协议仅在关联类型的特定条件成立时才需要特定函数?
- javascript - 如何使用 JavaScript 将一个网站重定向到另一个网站?
- php - Php - 将数组中的数字一一相加