ImageMagick使用文件中的边框颜色对图片进行边框设置

ImageMagick使用文件中的边框颜色对图片进行边框设置,imagemagick,Imagemagick,我正在尝试将边框“颜色”来自文件的帧/边框添加到图片中。 文件可以在这里找到 我认为Imagemagick无法做到这一点,所以我的想法是创建一个具有所需尺寸的新背景,并将图像放在上面 #creates the background convert -size ${PICTURE_WIDTH}x${PICTURE_HEIGHT} tile:paspartu_small.jpg background.jpg # places one on top of each other convert bac

我正在尝试将边框“颜色”来自文件的帧/边框添加到图片中。 文件可以在这里找到

我认为Imagemagick无法做到这一点,所以我的想法是创建一个具有所需尺寸的新背景,并将图像放在上面

#creates the background
convert -size ${PICTURE_WIDTH}x${PICTURE_HEIGHT} tile:paspartu_small.jpg background.jpg

# places one on top of each other
convert background.jpg picture_that_needs_to_be_framed.jpg -gravity center -region +0-0 -composite -matte result.jpg
我的问题是,我无法计算背景的尺寸,并在不破坏图像纵横比的情况下正确调整图像位置。 如果有人能帮我创建一个脚本来计算这些位置,我将非常感激

让我们以这个案例为例:

  • 我的照片是600x500px
  • 顶部边框必须为40px
  • 右边框必须是50px
  • 底部边框必须为60px
  • 左边框必须为50px
希望我所要达到的目标是可以理解的。 干杯


我正在使用IM7,如果您有ImageMagick v7+,您可以这样做:

#!/bin/bash
TOP=40
RIGHT=50
BOTTOM=60
LEFT=50
PICTURE="artwork.jpg"
BACKGROUND="background.jpg"

magick "$PICTURE" \
       -size "%[fx:w+${LEFT}+${RIGHT}]"x"%[fx:h+${TOP}+${BOTTOM}]" tile:"$BACKGROUND" \
       +swap -geometry +${LEFT}+${TOP} -composite result.jpg

如果您有ImageMagick v6,这应该可以满足您的需要,并且非常易于定制:

#!/bin/bash
TOP=40
RIGHT=50
BOTTOM=60
LEFT=50
PICTURE="artwork.jpg"
BACKGROUND="background.jpg"

# Get width and height of picture
read w h < <(convert "$PICTURE" -format "%w %h" info:)

((NEW_W=w+LEFT+RIGHT))
((NEW_H=h+TOP+BOTTOM))

convert -size ${NEW_W}x${NEW_H} tile:"$BACKGROUND" \
        "$PICTURE" -geometry +${LEFT}+${TOP} -composite result.jpg
#/bin/bash
TOP=40
右=50
底部=60
左=50
PICTURE=“artwork.jpg”
BACKGROUND=“BACKGROUND.jpg”
#获取图片的宽度和高度

阅读w h<如果您有ImageMagick v7+,您可以执行以下操作:

#!/bin/bash
TOP=40
RIGHT=50
BOTTOM=60
LEFT=50
PICTURE="artwork.jpg"
BACKGROUND="background.jpg"

magick "$PICTURE" \
       -size "%[fx:w+${LEFT}+${RIGHT}]"x"%[fx:h+${TOP}+${BOTTOM}]" tile:"$BACKGROUND" \
       +swap -geometry +${LEFT}+${TOP} -composite result.jpg

如果您有ImageMagick v6,这应该可以满足您的需要,并且非常易于定制:

#!/bin/bash
TOP=40
RIGHT=50
BOTTOM=60
LEFT=50
PICTURE="artwork.jpg"
BACKGROUND="background.jpg"

# Get width and height of picture
read w h < <(convert "$PICTURE" -format "%w %h" info:)

((NEW_W=w+LEFT+RIGHT))
((NEW_H=h+TOP+BOTTOM))

convert -size ${NEW_W}x${NEW_H} tile:"$BACKGROUND" \
        "$PICTURE" -geometry +${LEFT}+${TOP} -composite result.jpg
#/bin/bash
TOP=40
右=50
底部=60
左=50
PICTURE=“artwork.jpg”
BACKGROUND=“BACKGROUND.jpg”
#获取图片的宽度和高度

阅读w h<最好包含IM版本和编程启动页,因为这会对答案产生影响。-区域+0-0应该做什么?使用V7,您可能可以在一行中完成所有操作;你需要两三行。我编辑了我的帖子,谢谢。afk对延迟表示抱歉将IM版本和编程启动包括在内始终是一个好主意,因为这可能会对答案产生影响。-区域+0-0应该做什么?使用V7,您可能可以在一行中完成所有操作;你需要两三行。我编辑了我的帖子,谢谢。afk为这次延误感到抱歉哦我的主。。。真是太神奇了。非常感谢你的帮助,我一个人永远也做不到。你太棒了!通过添加任意边框大小,可能无法保持输出纵横比等于输入纵横比。Mark Setchell在下面显示了添加所需大小边框的命令。输入为600x500或1.2的w/h特性。但输出为700x600或1.167的w/h特性。因此,要么您需要接受纵横比的差异,要么您需要添加不同大小的边框以获得相同的纵横比,要么您必须调整结果图像的大小,使其变形以保持所需的纵横比。@fmw42同意,然而,我认为这个问题的意思是,最上面的图像必须保持不失真,并且边界与指定的厚度一致——这将导致整体纵横比(包括波迪尔)发生变化。哦,我的上帝。。。真是太神奇了。非常感谢你的帮助,我一个人永远也做不到。你太棒了!通过添加任意边框大小,可能无法保持输出纵横比等于输入纵横比。Mark Setchell在下面显示了添加所需大小边框的命令。输入为600x500或1.2的w/h特性。但输出为700x600或1.167的w/h特性。因此,要么您需要接受纵横比的差异,要么您需要添加不同大小的边框以获得相同的纵横比,要么您必须调整结果图像的大小,使其变形以保持所需的纵横比。@fmw42同意,然而,我认为这个问题的意思是,最上面的图像必须保持不失真,并且边界与指定的厚度一致——这将导致整体纵横比(包括波迪尔)发生变化。