В качестве инструментария можно использовать:В качестве примера используем следующую картинку:
Требуемые конечные размеры: 100x100.
Исторически сложилось, что первая реализация была сделана с использованием ImageMagick:
width=100
height=100
PIC_INFO=`identify -format "%m %w %h" $pic 2>/dev/null || echo "false"`
if [[ $PIC_INFO != "false" ]]; then
# image format
FORMAT=`echo $PIC_INFO | cut -d ' ' -f1`
# picture width
W=`echo $PIC_INFO | cut -d ' ' -f2`
# picture height
H=`echo $PIC_INFO | cut -d ' ' -f3`
# picture info
pi="$pic $FORMAT [$W x $H]"
## convert if only file is image and exciting [width x height]
if [[ $W -gt $width || $H -gt $height ]]; then
echo "convert $pi..."
convert $pic -resize "$size>" -sharpen 0.8 $pic
else
if [[ $FORMAT == "JPEG" ]]; then
echo "$pi : there is no reason to convert $pic"
else
echo "$pi is not a JPEG, convert to JPEG"
convert $pic $pic
fi
fi
Однако в приведённом уже скрипте содержится «финт ушами»: после пропорционального масштабирования картинки необходимо повысить резкость, но так, чтобы не полез т.н. «переsharp»
Рассмотрим этапы обработки картинки средствами Python Imaging Library:
img.thumbnail((target_width, target_height), Image.ANTIALIAS)
с использованием фильтра ANTIALIAS, но без повышения резкости
с использованием фильтра ANTIALIAS, но без повышения резкости
img.thumbnail((target_width, target_height), Image.ANTIALIAS)
ImageEnhance.Sharpness(img).enhance(sharpnessFactor)
с использованием фильтра ANTIALIAS и повышением резкости,
sharpnessFactor = 2.6
Замечание 1: функция thumbnail(size), в отличии от resize(size), производит пропорциональное масштабирование с сохранением пропорций.
Замечание 2: Размеры картинок полученные ImageMagick'ом 3189байт, Python Imaging Library: 2278байт, хотя при этом немного отличается насыщенность картинки.
дополнено:
Замечание 3: Уровень повышения резкости
ImageEnhance.Sharpness(img).enhance(sharpnessFactor)
для разных картинок разный - когда изменения меньше, чем порядок можно сказать, что он имеет линейную зависимость и равен отношению размеров исходной картинки (sourceWidth) к итоговой (targetWidth). sharpnessFactor = sourceWidth / targetWidth
1 комментарий:
Полезная информация.
Отправить комментарий