ImageMagick:将一张图像的 4 个边缘并排合成到另一张图像中
Posted
技术标签:
【中文标题】ImageMagick:将一张图像的 4 个边缘并排合成到另一张图像中【英文标题】:ImageMagick: composite 4 edges from one image into another, side-by-side 【发布时间】:2021-09-08 15:26:36 【问题描述】:我正在使用 Perl 5.16 和 ImageMagick 6.8(现在可能已经过时了,但它可以工作:)。我正在尝试从一张图像中提取所有 4 个边缘区域,并将它们并排、垂直地合成到另一张图像中。
我可以提取边缘并旋转它们,但我无法正确获得目标图像中的偏移量。边缘最终彼此重叠。我试过 x=>$marg, translate=>"$marg,0", 有偏移的几何:没有骰子。变量:$marg = 边缘宽度,$im = 源,$im2 = 目标,$ext = 提取区域
# left edge
$ext=sprintf("%dx%d+%d+%d",$marg,$h,0,0);
$res=$im2->Composite(image=>$im,compose=>Over,extract=>$ext);
# top edge
$ext=sprintf("%dx%d+%d+%d",$w,$marg,0,0);
$geo=sprintf("%dx%d+%d+%d",$marg,$h,0,0);
$res=$im2->Composite(image=>$im,compose=>Over,extract=>$ext,rotate=>90,translate=>"$marg,0");
【问题讨论】:
【参考方案1】:我已经很多年没有使用 PerlMagick 绑定了,但我想您会想要创建 4 个边缘条中的每一个,然后使用 +append
将它们水平并排放置。这是一个粗略的例子,就在终端中:
magick -size 20x50 xc:red xc:lime xc:blue +append result.png
更具体地解决您的问题,并从这张图片开始:
看起来像这样:
#!/bin/bash
magick ~/sample/images/blocks-RGB.png -resize 100x100 +repage -write MPR:orig +delete \
\( MPR:orig -gravity northwest -crop 30x+0+0 \) \
\( MPR:orig -gravity northwest -crop x30+0+0 -rotate 90 \) \
\( MPR:orig -gravity southwest -crop x30+0+0 -rotate 90 \) \
\( MPR:orig -gravity northeast -crop 30x+0+0 \) \
+append result.png
希望您能看到与 PerlMagick 的相似之处。第一行创建要使用的图像副本,第二行裁剪左边缘,第三行裁剪上边缘,第四行裁剪下边缘,第五行裁剪右边缘,最后一行 并排附加四个裁剪的部分。
【讨论】:
谢谢。我想我可以把它“翻译”成 Perl。我假设逻辑如下:“重新分页”的意思是“为每个操作创建一个新的原始副本”(然后删除原始副本)。以下 4 个裁剪操作提取每个副本中的相应边缘。然后“附加”就是将它们并排放置在目标中。 差不多了。repage
表示“忘记任何虚拟画布和偏移”。 MPR
是一个 "Magick Persistent Register",它只是一个命名的内存块,我将原始图像保存在其中,而不是继续去磁盘重新加载 4 个裁剪中的每一个的起始图像。
以上是关于ImageMagick:将一张图像的 4 个边缘并排合成到另一张图像中的主要内容,如果未能解决你的问题,请参考以下文章
Imagemagick convert -fill不会更改特定调色板区域的边缘