Image::Magick или фотошоп для perl. @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 2 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
leonidp
новый человек
0
Сообщения: 19
Зарегистрирован: 05.01.02
Откуда: http://forum.768.ru
Заголовок сообщения: Image::Magick или фотошоп для perl.
Сообщение Добавлено: 9 Ноябрь 2002, 23:22:00 
Image::Magick или фотошоп для perl.

Если вы занимались когда-либо обработкой изображений с помощью perl. То Вы наверное знаете, что то средство, которое нам предлагается повсюду не всегда хорошо подходит для наших нужд. Я конечно имею ввиду модуль GD. Почему он нам не подходит?
Начну по-порядку.
Во-первых, при resize изображения:
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code
Цитата:
<pre>$thumb->copyResized($srcImage,0,0,0,0,$oxn,$oyn,$ox,$oy);</pre>


Мы получаем очень, не качественно уменьшенную (или увеличенную) картинку, да и еще не качественно закомпрессированную. Например, в моем случае GD из jpeg изображения 640х480 (25 kb) при уменьшении в 200х150 создавала не качественное изображение весом всего на 20% меньше (~20kb). Хотя при уменьшеении ACDSee 5 (ACD FotoCanvas Lite 2.0) картинка занимала всего ~5 kb и при этом была отличного качества. Вы подумаете, мол сохраняй её по-человеческий, задай уровень сжатия jpeg - 80 и всё будет путем. Ан нет.
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code
Цитата:
<pre>print OUT $thumb->jpeg(80);</pre>


Результат еще хуже. Размер больше изначального.

Во-вторых, не внушает список функция GD. Нет, он внушает, но предназначен не много не для наших целей. С помощью GD удобно сделать надпись на точном изображении. В особенности .PNG. А например обрезать изображение, вытянуть, поменять цвета и вставить в него другое изображение с помощью GD уже не удобно.

В-третьих, у нас нет возможности делать GIF изображения. В том числе анимационные .gif файлы. Что тоже хочется.

Итак. Image::Magick со всем справляется великолепно.
Покажу для начала пример, изменения картинки jpg.

Есть photo.jpg. Размер 640х272. Замечу что фото изначально не очень качественное. 12621 bytes.

Изображение
Задача сделать чтобы она была размером 200х150.

<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>
use Image::Magick; #используем модуль
my($image, $x); #переменные
$image = Image::Magick->new; #новый проект
$x = $image->Read("photo.jpg"); #открываем файл
($ox,$oy)=$image->Get('base-columns','base-rows'); #определяем ширину и высоту изображения

$nx=int(($ox/$oy)*150); #вычисляем ширину, если высоту сделать 150
$image->Resize(geometry=>geometry, width=>$nx, height=>150); #Делаем resize (изменения размера)
if($nx>200) { #Если ширина получилась больше 200
$nnx=int(($nx-200)/2); #Вычисляем откуда нам резать
$image->Crop(x=>$nnx, y=>0); #Задаем откуда будем резать
$image->Crop('200x150'); #С того места вырезаем 200х150
}
$x = $image->Write("photo.jpg"); #Сохраняем изображение.
</pre><HR></BLOCKQUOTE>

Результат. Картинка 200х150 великолепного качества. 4206 bytes.
Изображение

Как видите всё проще пареной репы. [img]images/smiles/icon_smile.gif[/img]
Таким образом мы можем получить, например, из 300х180. Изображение 200х150. Что очень удобно, для сайтов с ограниченным дизайном. К примеру, если это иллюстрация к статьям, и Вы хотите чтобы картинки были одинакового размера. Есть в этом примере и один недостаток. Это - если ширина меньше 200, что изображение будет уже неодинакового размера. То есть при высоте 150 ширина будет меньше 200. Изменить этот недостаток очень легко. Нужно всего лишь проверить что больше ширина/200 или высота/150 и если больше высота/150, то изменять размер не ширины, а высоты и резать не ширину, а высоту.

Следующий пример. Выравнивает контрастность и нормализирует цвета.
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>
use Image::Magick; #используем модуль
my($image, $x); #переменные
$image = Image::Magick->new; #новый проект
$x = $image->Read("photo.jpg"); #открываем файл
$image->Contrast(); #Контрастность
$image->Normalize(); #Нормализуем
$x = $image->Write("photo.jpg"); #Сохраняем изображение.
</pre><HR></BLOCKQUOTE>

Получаем. 4647 bytes.
Изображение

Сделаем изображение черно-белым.
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>
use Image::Magick; #используем модуль
my($image, $x); #переменные
$image = Image::Magick->new; #новый проект
$x = $image->Read("photo.jpg"); #открываем файл
$image->Quantize(colorspace=>'gray');
$x = $image->Write("photo.jpg"); #Сохраняем изображение.
</pre><HR></BLOCKQUOTE>

Получаем. 4159 bytes.
Изображение

Очень часто нам нужно конвертировать изображения из одного формата в другой. Сделать это также легко.
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>
use Image::Magick; #используем модуль
my($image, $x); #переменные
$image = Image::Magick->new; #новый проект
$x = $image->Read("photo.jpg"); #открываем файл jpg
$x = $image->Write("photo.png"); #Сохраняем изображение png.
</pre><HR></BLOCKQUOTE>

В результат изображение в формате png.
Изображение

Так мы сможем открыть gif изображение. В данном случае первый фрейм.

<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>
$x = $image->Read("photo.gif[0]");
</pre><HR></BLOCKQUOTE>

Полный набор возможностей и инструментов Вы найдете в документации модуля здесь. Возможности на самом деле сопоставимы с возможностями фотошопа. Но всё же, Image::Magick хорош именно для редактирования изображений. Для точных изображений, рекомендую всё же использовать GD.

Комментарии пишите в форум /* цензура */ или лично на <A HREF="mailto:leonidp@yandex.ru">leonidp@yandex.ru</A>

Перепечатка приветствуется при сохранении гиперссылок.

Леонид Палагин
9 ноября 2002 г.

[ 10 Ноября 2002: Исправлено Long ]
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Заголовок сообщения: Image::Magick или фотошоп для perl.
Сообщение Добавлено: 10 Ноябрь 2002, 10:01:00 
Если хочется писать статьи - вперед, есть специальный раздел.
но использовать такой стиль для рекламы своего форума (типа скрытая реклама) не приветствуется на этом форуме. как впрочем и другая не санкционированная реклама.
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 2 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100