具有透明度的焊盘图像,使其在两个方向上的大小均为300的倍数(ImageMagick 7)

具有透明度的焊盘图像,使其在两个方向上的大小均为300的倍数(ImageMagick 7),imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,我的问题有点类似于这个问题:,但我不想让图像平方,只想在每个方向上向上缩放到最接近的300倍,并用透明填充。原始图像应该在这个新的填充中居中 例如: 输入图像:宽1004像素,高250像素 输出图像:宽1200像素,高300像素,原始图像居中 如果有必要的话,我正试图用Mac终端实现这一点 我已经成功地在上面的链接中进行了转换,以及其他必要的转换列表,但是我很难使用提供的IM变量,以及用于舍入浮点数的数学函数,以及扭曲:视口函数,哪个似乎是我应该使用的?我想你想要这个: magick -grav

我的问题有点类似于这个问题:,但我不想让图像平方,只想在每个方向上向上缩放到最接近的300倍,并用透明填充。原始图像应该在这个新的填充中居中

例如:

输入图像:宽1004像素,高250像素 输出图像:宽1200像素,高300像素,原始图像居中

如果有必要的话,我正试图用Mac终端实现这一点

我已经成功地在上面的链接中进行了转换,以及其他必要的转换列表,但是我很难使用提供的IM变量,以及用于舍入浮点数的数学函数,以及扭曲:视口函数,哪个似乎是我应该使用的?

我想你想要这个:

magick -gravity center start.png -background yellow -extent "%[fx:int((w+299)/300)*300]x%[fx:int((h+299)/300)*300]" result.png
因此,如果我们从1004x250的尺寸开始:

您将得到以下结果:

显然,您需要将
黄色
替换为
以获得透明边框,但我希望在StackOverflow上显示区段

如果使用不同的倍数,则我公式中的
299
就是
multiple-1
。因此,您可以将答案重新转换为:

MULT=300
magick -gravity center start.png -background yellow -extent "%[fx:int((w+$MULT-1)/$MULT)*$MULT]x%[fx:int((h+$MULT-1)/$MULT)*$MULT]" result.png
或者,如果您不喜欢丑陋的
%[fx:…]
表达式,您可以在shell中完成所有数学运算:

# Establish the multiple
MULT=300
# Get existing image width and height
read w h < <(magick -format "%w %h" start.png info:)
# Calculate new width and new height
((NW=((w+MULT-1)/MULT)*MULT))
((NH=((h+MULT-1)/MULT)*MULT))
magick -gravity center start.png -background yellow -extent "$NWx$NH" result.png
#建立多个
MULT=300
#获取现有图像的宽度和高度

阅读w h<非常好,非常感谢,这很有魅力!感谢%[fx:…事物中额外的“变通方法”,在我看来,这些东西很难处理。很酷-很高兴它对你有用。祝你的项目好运!