Заголовок сообщения: Image::Magick или фотошоп для perl. Добавлено: 9 Ноябрь 2002, 23:22:00
Image::Magick или фотошоп для perl.
Если вы занимались когда-либо обработкой изображений с помощью perl. То Вы наверное знаете, что то средство, которое нам предлагается повсюду не всегда хорошо подходит для наших нужд. Я конечно имею ввиду модуль GD. Почему он нам не подходит? Начну по-порядку. Во-первых, при resize изображения: <BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code
Мы получаем очень, не качественно уменьшенную (или увеличенную) картинку, да и еще не качественно закомпрессированную. Например, в моем случае 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>
Как видите всё проще пареной репы. [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>
Очень часто нам нужно конвертировать изображения из одного формата в другой. Сделать это также легко. <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 изображение. В данном случае первый фрейм.
Полный набор возможностей и инструментов Вы найдете в документации модуля здесь. Возможности на самом деле сопоставимы с возможностями фотошопа. Но всё же, Image::Magick хорош именно для редактирования изображений. Для точных изображений, рекомендую всё же использовать GD.
Комментарии пишите в форум /* цензура */ или лично на <A HREF="mailto:leonidp@yandex.ru">leonidp@yandex.ru</A>
Перепечатка приветствуется при сохранении гиперссылок.
17 Сообщения: 4362 Зарегистрирован: 25.04.01 Откуда: Москва
Заголовок сообщения: Image::Magick или фотошоп для perl. Добавлено: 10 Ноябрь 2002, 10:01:00
Если хочется писать статьи - вперед, есть специальный раздел. но использовать такой стиль для рекламы своего форума (типа скрытая реклама) не приветствуется на этом форуме. как впрочем и другая не санкционированная реклама.
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.