我正在寻找 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 命令, - 它将黑色背景图像写入磁盘(缺点),
- 但将调整大小的图像放入复合函数中。