Урожай без потерь в формате JPEG

Мне нужно обрезать кучу JPEG на 20 пикселей на правой стороне без потерь. Знаете ли вы о каком-либо программном обеспечении, которое может это сделать? Я проверил jpegtran, но ему нужен размер файла в пикселях перед кадрированием, и я не знаю, как создать пакетный файл с этим. Есть идеи?

2 ответа

Решение

Мой сценарий оболочки немного ржавый, поэтому, пожалуйста, сделайте резервную копию ваших изображений, прежде чем пытаться этот сценарий.

#!/bin/bash
FILES=/path/to/*.jpg

for f in $FILES
do
    identify $f | awk '{ split($3, f, "x"); f[1] -= 20; cl = sprintf("jpegtran -crop %dx%d+0+0 %s > new_%s", f[1], f[2], $1, $1); system(cl); }'
done

Обратите внимание:

  • Отрегулируйте путь к правильному значению
  • Вам нужен *.jpeg?
  • identify команда ImageMagick
  • awk будет брать размеры в пикселях от identify использовать в качестве параметра (с шириной, уменьшенной на 20 пикселей) для jpegtran обрезать изображение
  • Новое изображение сохраняется как new_[old_name].jpg
  • jpegtran может настроить область обрезки, чтобы она могла работать без потерь. Убедитесь, что полученные изображения имеют правильный размер и не немного больше.

Очень похоже на принятый ответ, следующее также будет работать с именами файлов, содержащими пробелы. И это, возможно, проще, используя identifyвстроенный -formatвариант вместо синтаксического анализа вывода с помощью awk.

#!/bin/bash

X=0; Y=0   # offset from top left corner

for f in /path/to/*.jpg; do
    read -r W H < <(identify -format '%w %h' "$f") # get width and height
    (( W -= 20 ))                                  # substract 20 from width
    out="${f%%.jpg}-crop-20.jpg"                   # add "-crop-20" to filename
    jpegtran -crop ${W}x$H+$X+$Y "$f" > "$out"     # crop
done

BatchCrop может сделать это. Он поддерживает как Windows, так и Mac.

http://batchcrop.com/

Другие вопросы по тегам