Подготовка фото для выкладывания в сеть


Vitls - Posted on 26 Январь 2006

У вас есть коллекция фото в цифровом формате, немного места назнакомов www или ftp сервере и вы хотите поделиться этими фотками с друзьями. Это можно сделать, НО... как правило фото имеют весьма большие размеры. Уменьшить фоту можно примерно так: заходите в каталог где лежат ваши нетленные творения и набираете команду

for i in *.jpg; do convert -resize 640x480 -quality 85 $i small-$i.jpg; done

Утилита convert идет в составе программы ImageMagick. Данная команда читает все файлы с суффиксом jpg в текущем каталоге, приводит из к размероу 640х480 и записывает с префиксом small-.У вас есть коллекция фото в цифровом формате, немного места на знакомом www или ftp сервере и вы хотите поделиться этими фотками с друзьями. Это можно сделать, НО... как правило фото имеют весьма большие размеры. Уменьшить фоту можно примерно так: заходите в каталог где лежат ваши нетленные творения и набираете команду

for i in *.jpg; do convert -resize 640x480 -quality 85 $i small-$i.jpg; done

Утилита convert идет в составе программы ImageMagick. Данная команда читает все файлы с суффиксом jpg в текущем каталоге, приводит из к размероу 640х480 и записывает с префиксом small-.

0
Ваша оценка: Ничего

комантарий в тему . примерно тоже самое но на perl

mogrity из того же пакета ImageMagick можно юзать без цикла

Че-то не работает... Почему, когда я указываю разрешение 640х480 , он делает их 1024х768 ?

Потому что надо не -size, а -resize. Кроме того, достаточно указать только ширину картинки, высота будет сосчитана автоматически для сохранения пропорции (как это обойти - см. convert -help а еще лучше документация на imagemagik в формате html).

convert -resize 640 -quality 65 foto.jpg new_foto.jpg

насчет автоматического подбора ширины не знал Ж:-)
буквльно позавчера понадобилось, сбецал вот такой скприпт
доведу до ума ели понадобится еще раз.
фотки ресайзились в 10% от первоначального варианта

#!/bin/sh
# by 
#
# скрипт для ресайза картинок дерева каталогов
# создается директория с такой же структурой директорий как и начальная
# заодно преобразоваются большие буквы в маленькие в имени файла
# TODO: параметрый командной строки. 
# TODO: в отдельный параметр или/и переменную команду преобразования
 
#set -x
# устанакливаем каталог с фотоальбомами
if [ $1 ]; then
    START_DIR=$1
else
    START_DIR=.
fi
 
# имя дектории куда складывать заресайзенные картинки
SMALL_DIR=small
# префикс добавляемый к преобразованным файлам
PREFIX=-small
 
# если нет это директори то создать
test -d $SMALL_DIR || mkdir -p $SMALL_DIR
 
#перебираем от 
find $START_DIR -name "*.[jJ][Pp][Gg]" | while read FILE; do
    NEWNAME=`basename "$FILE" | sed -e "y/A-Z/a-z/" -e "s/\....$/$PREFIX&/"`
    DIRNAME=`dirname "$FILE"`
 
    # создаем в альтернативном ресайженом дереве каталогов если его нет
    test -d "$SMALL_DIR/$DIRNAME" || mkdir -p "$SMALL_DIR/$DIRNAME"
 
    # если уже есть в альтернативном дереве каталогов преоьбразованный файл
    # то пропутить преобразрование
    test -f "$SMALL_DIR/$DIRNAME/$NEWNAME" && continue
 
    # не допускаем повторного перекодирования если SMALL_DIR нахдится
    # например в START_DIR
    echo $START_DIR/$FILE | grep -qs -- $PREFIX\\....$ && continue
 
    echo \"$START_DIR/$FILE\"  --\> \"$SMALL_DIR/$DIRNAME/$NEWNAME\"
    convert -resize 10% "$START_DIR/$FILE" "$SMALL_DIR/$DIRNAME/$NEWNAME"
done

--
Signature invent in progress 19%

Иногда бывает нужно изменить размер для очень большого числа картинок, лежащих в разных директориях рекурсивно.
Я в свое время набросал простенький скрипт (без комментов) для этого дела, чем очень сильно помог шефу - любителю цифры :)

#! /bin/sh
# Откуда брать - должна существовать
FROM=/home/user/FOTO/
# Куда класть - должна существовать
TO=/home/user/FOTO-small
find $FROM -name '*.jpg' \
  -exec convert -size 1024x \{\} -quality 85 -resize 1024x \{\}-small.jpg \; -exec echo \{\} \;
find $FROM -type d -exec mkdir -p $TO\{\} \;
find $FROM -name '*-small*' -exec mv \{\} $TO\{\} \;

исправлено. спасибо!

Очень полезная вещь!
Спасибо!

очень хорошо сжимает фотки еще и параметр -quality. Меньше 50, наверное, использовать неразумно, но и больше 85 тоже.

этот параметр используется в Wavelet-преобразованиях для определения максимального размера бокса (в теории могу ошибаться, давно дело было). Те же Adobe и man по ImageMagick не рекомендуют использовать этот параметр меньше 85, чтобы не получить значительных потерь в качестве.

Я для интернета ставлю минимальное рекомендуемое - 85, для хранения лучше TIFF или, если выбора нет, то ставьте 95-100.

я имиджмаджиком не пользуюсь, поэтому вот моя реализация сего (видимо, каждый с этим сталкивался) с помощью netpbm
данный скрипт переименовывает получившиеся файлы в jpg с маленькой буквы, уменьшая их в половину:

set -e
for file in *[Jj][Pp][Gg]
do
  set -- $file
  jpegtopnm "$1.$2" | pnmscale 0.5 | pnmtojpeg > "$1sm.jpg"
done

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.