Оптимизировать каталоги с фотографиями и прочими рисунками без потери качества (рекурсивно). Развел дома архифчик в 21G (только фото), уверен не предел, у кого то и побольше бывает ... в моем случае за гиг битва ;)
Да и плюс порой исходники изображений оптимизировать для сайтов ...
Дано:
Площадка: linux 2.6.22.9-desktop-1mdv
Инструментарий:
- jpegtran (Independent JPEG Group's JPEGTRAN, version 6b 27-Mar-1998)
- pngcrush (pngcrush 1.6.10)
- gifsicle (LCDF Gifsicle 1.42 (ungif))
- /bin/sh
- руки (о месторождении данного инструментария прошу писать в личку =))
Решение:
Неохото было держать в голове опции из каждого инструментария, дабы переодично обращаться к ним для оптимизации свежего сырья, по этой причине тут же родился скриптик писанный на sh.
#!/bin/sh
JPEGTRAN=/usr/bin/jpegtran
PNGCRUSH=/usr/bin/pngcrush
GIFSICLE=/usr/bin/gifsicle
input_dir=$1
if [[ -z "$input_dir" ]]; then
echo "Usage: $0"
echo "Example: $0 /tmp/my/albums"
exit 1
fi
rm -f $input_dir./$0.log #log-файл для ошибок
make_gif()
#сжимаем GIF файл
{
mv $rfile $rfile.old 2>> $input_dir./$0.log || return 1
$GIFSICLE -O2 $rfile.old > $rfile 2>> $input_dir./$0.log || return 1
# -O2 удаляет повторяющую попиксельную информацию в анимированных GIF-файлах
rm -f $rfile.old >> $input_dir./$0.log
echo " ok."
return 0
}
make_jpg()
{
mv $rfile $rfile.old 2>> $input_dir./$0.log || return 1
$JPEGTRAN -copy none -optimize $rfile.old > $rfile 2>> $input_dir./$0.log || return 1
# -copy none удалить все метаданные безо всякой потери качества отображения
# -optimize позволяет оптимизировать таблицы Хафмана (Huffman) и улучшать компрессию (без потери качества).
rm -f $rfile.old >> $input_dir./$0.log
echo " ok."
return 0
}
make_png()
{
mv $rfile $rfile.old 2>> $input_dir./$0.log || return 1
$PNGCRUSH -rem alla -brute -reduce $rfile.old $rfile 2>> $input_dir./$0.log || return 1
# -rem alla удаляет все чанки, но сохраняет один-единственный, содержащий прозрачность.
# -reduce пробует уменьшить число цветов в палитре, если такое возможно.
# -brute пробует более сотни различных методов для оптимизации изображения дополнительно к 10 по умолчанию.
rm -f $rfile.old >> $input_dir./$0.log
echo " ok."
return 0
}
for rfile in $(find "$input_dir" -name "*.*" | egrep -ie ".*\.(gif|jpg|jpeg|png)" | sort); do
rfile_base=`basename "$rfile"`
rfile_dir=`dirname "$rfile"`
rfile_name=$(echo `expr match "$rfile_base" '\(.*\)\..*'`)
rfile_ext=$(echo `expr match "$rfile_base" '.*\.\(.*\)'`)
echo -n "Processing $rfile_base ..."
case "$rfile_ext" in
gif|GIF )
make_gif $rfile || echo "false"
;;
jpg|JPG )
make_jpg $rfile || echo "false"
;;
jpeg|JPEG )
make_jpg $rfile || echo "false"
;;
png|PNG )
make_png $rfile || echo "false"
;;
*)
echo "false"
;;
esac
done
Примечание:
Спасибо дяденьке Stoyan Stefanov. (http://yuiblog.com/blog/2008/11/14/imageopt-3/)
и сайтику http://webo.in (http://webo.in/articles/habrahabr/69-total-image-optimization/) где речь о оптимизации сайта в целом.
Комментариев нет:
Отправить комментарий