批量裁剪并调整图像大小以创建缩略图

Jer*_*oen 5 linux image imagemagick thumbnails imagemagick-convert

我有一大堆jpg图像,我想创建缩略图.图像都有不同的大小和分辨率,但我希望所有缩略图都有标准尺寸,例如120x80px.但是,我不想拉伸图像.所以我想做以下事情:

  1. 将图像裁剪为1.5:1的宽高比.将裁剪区域居中(即左右切割等量,或上下切割
  2. 将图像大小调整为120 x 80像素.

是否有linux命令可以这样做?我查看了imagemick转换,但我无法弄清楚如何进行居中裁剪.您似乎必须手动指定每个图像的裁剪区域?

cho*_*oba 6

这适用于大于120x80的图像.没有在较小的上测试,但你应该能够调整它.

#! /bin/bash
for img in p*.jpg ; do
    identify=$(identify "$img")
    [[ $identify =~ ([0-9]+)x([0-9]+) ]] || \
        { echo Cannot get size >&2 ; continue ; }
    width=${BASH_REMATCH[1]}
    height=${BASH_REMATCH[2]}
    let good_width=height+height/2

    if (( width < good_width )) ; then # crop horizontally
        let new_height=width*2/3
        new_width=$width
        let top='(height-new_height)/2'
        left=0

    elif (( width != good_width )) ; then # crop vertically
        let new_width=height*3/2
        new_height=$height
        let left='(width-new_width)/2'
        top=0
    fi

    convert "$img" -crop "$new_width"x$new_height+$left+$top -resize 120x80 thumb-"$img"
done
Run Code Online (Sandbox Code Playgroud)