【问题标题】:ImageMagick: composite 4 edges from one image into another, side-by-sideImageMagick:将一张图像的 4 个边缘并排合成到另一张图像中
【发布时间】: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");

【问题讨论】:

    标签: perl image-processing imagemagick composite


    【解决方案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 个裁剪中的每一个的起始图像。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多