如何在ImageMagick中通过裁剪来向北裁剪并居中

史蒂芬·杰弗里斯(Steven Jeffries)

有没有一种方法可以裁剪水平居中但垂直居中的图像?例如,这就是我想要裁剪图像的方式:

预期的

但是,使用命令mogrify -crop 250x250 -gravity North cat.jpg,我得到:

得了

请注意,我将批量处理约10,000张不同大小的图像,因此无法明确选择要裁剪的确切区域。

贾科莫1968

从我的头顶上算起,您应该在数学上处理从左上角开始的坐标0,0(又名:NorthWestImageMagick术语),以便将裁剪框区域定位为如下所示:

(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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我如何在imageview中设置居中(70%)裁剪的图像

来自分类Dev

在div中居中并裁剪图像

来自分类Dev

在div中居中并裁剪图像

来自分类Dev

如何在流体宽度容器中居中裁剪图像(<img>)

来自分类Dev

如何在ImageMagick中使用相对偏移进行裁剪?

来自分类Dev

如何在ImageView中遮罩/裁剪矩形

来自分类Dev

如何在Titanium中以圆形裁剪图像?

来自分类Dev

如何在Android中裁剪图像?

来自分类Dev

如何在Pygame中“裁剪”旋转图像

来自分类Dev

如何在Flutter中裁剪WebView的大小?

来自分类Dev

如何在png图像中裁剪空白?

来自分类Dev

如何在MATLAB中从地标裁剪脸部?

来自分类Dev

如何在 AutoIt 中裁剪位图?

来自分类Dev

如何在画布中对角裁剪图像

来自分类Dev

如何使用imagemagick从pdf的框中裁剪签名?

来自分类Dev

在ImageMagick中裁剪图像时如何设置偏移

来自分类Dev

如何使用ImageMagick提高裁剪图像的性能?

来自分类Dev

如何使用imagemagick转换缩放和裁剪?

来自分类Dev

如何居中裁剪全屏背景图像

来自分类Dev

如何在开罗裁剪ImageSurface?

来自分类Dev

Flexbox裁剪和居中

来自分类Dev

Flexbox裁剪和居中

来自分类Dev

如何在Matlab中裁剪任意尺寸的矩阵?

来自分类Dev

如何在Blender VSE中裁剪条(宽x高)?

来自分类Dev

如何在HTML / CSS中裁剪SVG文件

来自分类Dev

如何在Android中裁剪位图的重叠区域?

来自分类Dev

如何在opencv java中裁剪检测到的面部图像

来自分类Dev

如何在滑行中为圆形裁剪图像制作边框

来自分类Dev

如何在pylab / pyplot中裁剪极坐标图