Как обрезать изображение из центра без изменения размера с помощью imagemagick

for parentDir in *
do
    cd "$parentDir"
    for subDir in *
    do
        cd "$subDir"
        for file in *.*
        do
            convert "$file" -crop 120x95 summary_"$file"
            convert "$file" -crop 160x225 detail_"$file"
        done
        mkdir detail
        mkdir summary
        mv summary_* summary/
        mv detail_* detail/
        cd ..
    done
cd ..
done

Вот мой сценарий, мне нужен способ обрезать изображение без изменения размера, избавиться от лишнего окружения.

Например: 1200* 1500 изображений ----> 120px * 90px от центра

3 ответа

Если вы просто пытаетесь обрезать каждое изображение до одной центральной части, используйте

-gravity center -crop WxH+0+0 +repage

В противном случае вы получите много урожаев WxH для каждого изображения.

Благодаря @fmw42 я сделал этот скрипт для использования с моим файловым менеджером Dolphin, который также можно адаптировать для других:

#!/usr/bin/env bash
# DEPENDS: imagemagick (inc. convert)
OLDIFS=$IFS
IFS="
"
# Get dimensions
WH="$(kdialog --title "Image Dimensions" --inputbox "Enter image width and height - e.g. 300x400:")"
# If no name was provided
if [ -z $WH ]
then
    exit 1
fi
for filename in "${@}"
do
    name=${filename%.*}
    ext=${filename##*.}
    convert "$filename" -gravity center -crop $WH+0+0 +repage "${name}"_cropped."${ext}"
done
IFS=$OLDIFS

Еще одно решение на основе imagemagick. Вот версия скрипта с mogrify для массовой обработки изображений вместо преобразования , которая работает с отдельными изображениями:

      for parentDir in *
do
  cd "$parentDir"
  for subDir in *
  do
    cd "$subDir"

    mkdir detail
    cp * detail/
    mogrify -gravity center -crop 160x225+0+0 +repage detail/*

    mkdir summary
    cp * summary/
    mogrify -gravity center -crop 120x95+0+0 +repage summary/*
  done
  cd ..
done
Другие вопросы по тегам