Урожай без потерь в формате 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
команда ImageMagickawk
будет брать размеры в пикселях от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.