使用 Image Magick 在固定画布中嵌入图像

使用 Image Magick 在固定画布中嵌入图像

我正在寻找 Image Magick 中的命令来获取任意图像(任何纵横比),并将其嵌入到固定大小的图像中,并根据需要增大/缩小源图像以适应。

例如,宽源 Image1 生成以下结果:

在此处输入图片描述 在此处输入图片描述

高大的源 Image2 生成了这样的结果:

在此处输入图片描述 在此处输入图片描述

在每种情况下,最终图像都是固定大小,例如 400 x 300 像素。

(所需命令稍后将批量用于处理一系列具有不同初始尺寸的文件。)

与此相关问题比较:当前问题的不同之处在于,它需要固定的最终图像大小,并可能调整源图像的大小(而不是保持源图像不变,并在最后建立给定的纵横比)。


到目前为止,我已经查看了大约六个教程网站,但没有找到任何似乎可以解决此特定用例的网站。以下是我迄今为止尝试过的示例。

首先,这里是对先前的批处理文件的修改,以使用变量进行特定的调整大小,但它仍然会导致比例输出而不是固定的输出大小:

REM Fit image for "2 frames + large feature"

set /a fwidth = 870
set /a fheight = 980

setLocal enableDelayedExpansion

for %%a in (*.jpg) do (
  set outfile=%%~na-fit
  magick "%%a" -set option:wd "%%[fx:(%fwidth%/%fheight%)>(w/h)?(%fwidth%/%fheight%*h):w]" -set option:ht "%%[fx:(%fwidth%/%fheight%)>(w/h)?h:(w/(%fwidth%/%fheight%))]" -gravity center -background black -extent "%%[wd]x%%[ht]" "!outfile!%%~xa"
)

其次,尝试强制特定的输出尺寸,但它只能裁剪原始图像的一部分:

REM Fit image to wide format
REM For 5-frame show, 3:2 ratio

set /a fwidth = 300
set /a fheight = 200

SetLocal EnableDelayedExpansion

for %%a in (*.jpg) do (
  set outfile=%%~na-fit
  magick "%%a" -set option:wd "%fwidth%" -set option:ht "%fheight%" -gravity center -background black -extent "%%[wd]x%%[ht]" "!outfile!%%~xa"
)

第三,尝试使用“转换”运算符,最初使用固定百分比调整大小,但由于我无法检测到的原因,它完全失败了:

REM Fit image to wide format
REM For 5-frame show, 3:2 ratio

setLocal enableDelayedExpansion

for %%a in (*.jpg) do (
  set outfile=%%~na-fit
  magick convert "%%a" -resize 25%% "!outfile!%%~xa"
}

第四,对前面的内容进行调整以获得固定的输出大小,但不是通过缩小源图像的大小来获得该输出大小的子集:

REM Shrink images to 25% via ImageMagick
REM E.g.: convert image.jpg -resize 25% image-small.jpg

SetLocal EnableDelayedExpansion

for %%a in (*.jpg) do (
  set outfile=%%~na-shrunk
  magick convert "%%a" -resize 300x200 -background black "!outfile!%%~xa"
)

因此,如果有人能指出哪个最接近解决方案并修复它,我们将不胜感激。

答案1

我花了更多的时间来处理它,这里有一个批处理文件似乎可以满足我的要求(用适当的帧大小替换常量):

REM Fit image for "4 frames"

set /a fwidth = 870
set /a fheight = 475

setLocal enableDelayedExpansion

for %%a in (*.jpg) do (
  magick convert -size %fwidth%x%fheight% xc:black "%%a" -geometry %fwidth%x%fheight% -gravity center -composite "%%~na-fit%%~xa"
)

答案2

基于 Linux(bash)的解决方案,可调整图像大小:

#!/bin/bash

SIZE="400x300"

# create the background; could be careful to make sure that background.jpg doesn't already exist
convert -size $SIZE xc:black background.jpg  

for i in `ls *.jpg`
do
convert -resize $SIZE $i - | convert -composite -gravity center background.jpg - $i
done

显著特点:

  • 在我的 Linux 发行版上convert是 ImageMagik 命令,
  • 它将黑色背景图像写入磁盘(缺点),
  • 但将调整大小的图像放入复合函数中。

相关内容