LINUX.ORG.RU

convert (imagemagic) outputfile < 300K


0

0

привет всем,

имеем кучу фоток, нужно их оптимировать для веба, ну это сделать не так сложно:

convert a.jpg -quality 75 -resize 2048x b.jpg

вот тока как сделать чтобы b.jpg был не больше 300 Кбайт?

★★

Ответ на: комментарий от djung

В помощь.

http://askville.amazon.com/set-unix-jpg-file-size-limit-tool-ImageMagick/Answ...

So concentrating on just image resolution (no cropping), here’s a quick bash script that uses ImageMagick’s convert and identify tools:

#!/bin/sh

if [ $# -ne 2 ]

then

echo -e "\nusage: $0 <file size limit> <image>\n"

exit

fi

UNIT_PERCENT_REDUCTION=10

IMAGE_FORMAT=jpg

FILE_SIZE_LIMIT=$1

IMAGE_IN=$2

BASENAME=`echo ${IMAGE_IN} | cut -d'.' -f-1 `

IMAGE_OUT=${BASENAME}.smaller.jpg

FILE_SIZE=`ls -sk $IMAGE_IN | cut -d' ' -f1`

if [ $FILE_SIZE -ge $FILE_SIZE_LIMIT ]

then

echo "reducing $IMAGE_IN to: $FILE_SIZE KB"

GEOMETRY=`identify $IMAGE_IN | cut -d' ' -f3`

X=`echo $GEOMETRY | cut -d'x' -f1`

Y=`echo $GEOMETRY | cut -d'x' -f2`

echo "original geometry: ${X}x${Y}"

PERCENT_REDUCTION=100

while [ $FILE_SIZE -ge $FILE_SIZE_LIMIT ]

do

let PERCENT_REDUCTION-=UNIT_PERCENT_REDUCTION

let NEW_X=X*PERCENT_REDUCTION/100

let NEW_Y=Y*PERCENT_REDUCTION/100

NEW_GEOMETRY="${NEW_X}x${NEW_Y}"

echo "... trying geometry ${NEW_GEOMETRY}"

convert $IMAGE_IN -resize ${NEW_GEOMETRY} $IMAGE_OUT

FILE_SIZE=`ls -sk $IMAGE_OUT | cut -d' ' -f1`

done

mv $IMAGE_OUT ${BASENAME}.${NEW_GEOMETRY}.${IMAGE_FORMAT}

fi

Saving the script above as limit2size.sh , image filename image.jpg and a desired size of 100 KB, the command line usage is: limit2size.sh 100 image.jpg The script will repeatedly resize and test until the resulting image file size is equal to, or less than, the target file size. The final result is renamed using a combination of the original filename and the final geometry.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.