Ste*_*ies 6 imagemagick images mogrify
有没有办法裁剪水平居中但不垂直居中的图像?例如,这是我想要裁剪图像的方式:
但是,使用命令mogrify -crop 250x250 -gravity North cat.jpg,我得到:
请注意,我将批量处理大约 10,000 张不同大小的图像,因此我无法明确选择要裁剪的确切区域。
小智 5
Giacomo1968 给出了一个可行的解决方案,但我认为更简单的解决方案不是编写脚本,而是使用两步转换。首先使用北重力将高度减小到 250 像素,然后使用中心重力将宽度减小到 250 像素:
mogrify -gravity North -crop x250+0+0 cat.jpg
mogrify -gravity Center -crop 250x250+0+0 cat.jpg
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用 Convert 与非 jpg 中间图像,以防止由于额外转换为 jpg 而导致质量损失:
convert -gravity North -crop x250+0+0 cat.jpg png:- | convert -gravity Center -crop 250x250+0+0 png:- cat.jpg
Run Code Online (Sandbox Code Playgroud)
在我的脑海中,从数学上讲,您应该处理从左上角开始的坐标0,0(又名:NorthWest在 ImageMagick 术语中),因此您需要将裁剪框区域定位为如下所示:
(width of image - width of crop area) / 2\nRun Code Online (Sandbox Code Playgroud)\n\n因此,您可以使用示例命令从概念上执行类似的操作mogrify:
mogrify -crop 250x250+[(width of image - 250)/2]+0 -gravity NorthWest cat.jpg\nRun Code Online (Sandbox Code Playgroud)\n\n这是一个相当不错的概念,但并不是一个有用的现实。但我只是进行了一些实验,并使其适用于单个测试图像:
\n\nCROP_W=250\nCROP_H=250\nIMG_W=$(identify -format %w test.jpg)\nX_OFFSET=$((($IMG_W-$CROP_W)/2))\nmogrify -crop ${CROP_W}x${CROP_H}+${X_OFFSET}+0 -gravity NorthWest test.jpg\nRun Code Online (Sandbox Code Playgroud)\n\n由于 ImageMagick\xe2\x80\x99s-gravity默认值NorthWest无论如何,您可以通过-gravity完全删除该选项来简化它,如下所示:
CROP_W=250\nCROP_H=250\nIMG_W=$(identify -format %w test.jpg)\nX_OFFSET=$((($IMG_W-$CROP_W)/2))\nmogrify -crop ${CROP_W}x${CROP_H}+${X_OFFSET}+0 test.jpg\nRun Code Online (Sandbox Code Playgroud)\n\n在测试了这个概念之后,我编写了这个 Bash 脚本,它按预期工作。只需更改该DIRECTORY值以匹配您计划执行操作的实际目录即可。这echo mogrify使您可以准确地看到如果运行该命令会发生什么;echo如果您对结果感到满意,请将其删除,然后让脚本继续执行:
#!/bin/bash\n\n# Set the crop width and height.\nCROP_W=250\nCROP_H=250\n\n# Set the directory to act on.\nDIRECTORY=\'/path/to/images\'\n\n# Use find to find all of the images; in this case JPEG images.\nfind ${DIRECTORY} -type f \\( -name "*.jpg" -o -name "*.JPG" \\) |\\\n while read FULL_IMAGE_PATH\n do\n # Get the image width with identify.\n IMG_W=$(identify -format %w ${FULL_IMAGE_PATH})\n\n # Calculate the X offset for the crop.\n X_OFFSET=$((($IMG_W-$CROP_W)/2))\n\n # Run the actual mogrify command.\n # mogrify -crop ${CROP_W}x${CROP_H}+${X_OFFSET}+0 ${FULL_IMAGE_PATH}\n echo mogrify -crop ${CROP_W}x${CROP_H}+${X_OFFSET}+0 ${FULL_IMAGE_PATH}\n\n done\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2404 次 |
| 最近记录: |