2017-09-05 74 views
0

我想帧/边框图片的边框“颜色”来自文件。 该文件可以在这里找到https://storage.googleapis.com/ramki-opticlan/paspartu_small.jpgImageMagick使用边框颜色从一个文件框架图片

我认为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
  • 上边框必须是40像素
  • 右边框必须是50像素
  • 下边框必须是60像素
  • 左边界必须是50px

希望它'我可以理解我想要完成什么。 干杯

我使用IM7

+0

它始终是一个好主意,包括您的IM版本和编程laungage作为可以对答案的效果。什么是地区+ 0-0应该做的?有了V7,你可以在一行中做所有事情;而V6则需要两三行。 – Bonzo

+0

我编辑我的帖子,谢谢。很抱歉,延迟 – Izopi4a

回答

2

如果您有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 

所以,如果我从这开始:

enter image description here

我结束了这一点:

enter image description here

+0

哦,我的主......这太神奇了。非常感谢您的帮助,我永远无法自己做到这一点。你摇滚! – Izopi4a

+0

高兴 - 你的项目祝你好运! –

+0

通过添加任意边框尺寸,可能无法保持输出宽高比等于输入宽高比。马克Setchell已经显示下面的命令来添加你想要的大小的边界。输入是600x500或1.2的w/h方面。但产量是700x600或w/h方面的1.167。因此,无论您需要接受高宽比的差异,还是需要添加不同的边框大小以实现相同的高宽比,或者您必须调整结果图像的大小以使其变形以保持所需的宽高比。 – fmw42