从我的头顶上算起,您应该在数学上处理从左上角开始的坐标0,0
(又名:NorthWest
ImageMagick术语),以便将裁剪框区域定位为如下所示:
(width of image - width of crop area) / 2
因此,您可以在概念上使用示例mogrify
命令执行以下操作:
mogrify -crop 250x250+[(width of image - 250)/2]+0 -gravity NorthWest cat.jpg
这是一个很好的概念,但不是有用的现实。但是我只是做了一些实验,并使其适用于单个测试图像:
CROP_W=250
CROP_H=250
IMG_W=$(identify -format %w test.jpg)
X_OFFSET=$((($IMG_W-$CROP_W)/2))
mogrify -crop ${CROP_W}x${CROP_H}+${X_OFFSET}+0 -gravity NorthWest test.jpg
由于ImageMagick的-gravity
默认设置是NorthWest
,因此可以通过-gravity
完全删除该选项来简化它:
CROP_W=250
CROP_H=250
IMG_W=$(identify -format %w test.jpg)
X_OFFSET=$((($IMG_W-$CROP_W)/2))
mogrify -crop ${CROP_W}x${CROP_H}+${X_OFFSET}+0 test.jpg
在测试完该概念之后,我整理了这个Bash脚本,它可以按预期工作。只需更改DIRECTORY
值以匹配您打算对其执行操作的实际目录即可。这样一echo mogrify
来,您可以确切地了解如果运行该命令会发生什么情况。echo
如果您对结果满意,请删除该脚本,然后让脚本进行处理:
#!/bin/bash
# Set the crop width and height.
CROP_W=250
CROP_H=250
# Set the directory to act on.
DIRECTORY='/path/to/images'
# Use find to find all of the images; in this case JPEG images.
find ${DIRECTORY} -type f \( -name "*.jpg" -o -name "*.JPG" \) |\
while read FULL_IMAGE_PATH
do
# Get the image width with identify.
IMG_W=$(identify -format %w ${FULL_IMAGE_PATH})
# Calculate the X offset for the crop.
X_OFFSET=$((($IMG_W-$CROP_W)/2))
# Run the actual mogrify command.
# mogrify -crop ${CROP_W}x${CROP_H}+${X_OFFSET}+0 ${FULL_IMAGE_PATH}
echo mogrify -crop ${CROP_W}x${CROP_H}+${X_OFFSET}+0 ${FULL_IMAGE_PATH}
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句