Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
• Заказать продвижение сайта
• Программа для рисования блок-схем
• Инженерный калькулятор онлайн
• Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Гостевая книга ... 65535
Содержание сайт... 65535
Вызов хранимых ... 65535
Эмулятор микроп... 65535
Бип из системно... 58098
Invision Power ... 57355
Организация зап... 57158
Модуль Forms 56357
Создание отчето... 54778
Приложение «Про... 54169
Подключение Mic... 53957
Оператор выбора... 53774
ТЕХНОЛОГИИ ДОСТ... 50642
Программируемая... 47075
Пример работы с... 46404
Имитационное мо... 46395
21 ошибка прогр... 41481
Реклама
Сейчас на сайте
Гостей: 15
На сайте нет зарегистрированных пользователей

Пользователей: 13,006
новичок: margaritamoroz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Файл записей с выводом обратного заголовка на Turbo Pascal
Моделирование работы перекрёстка по регулированию движения на GPSS + Поя...
Расчет размера дохода на одного человека в Turbo Pascal

Реклама

Image::Magick или фотошоп для perl
Если вы занимались когда-либо обработкой изображений с помощью perl. То Вы наверное знаете, что то средство, которое нам предлагается повсюду не всегда хорошо подходит для наших нужд. Я конечно имею ввиду модуль GD. Почему он нам не подходит?
Начну по-порядку.
Во-первых, при resize изображения:
$thumb->copyResized($srcImage,0,0,0,0,$oxn,$oyn,$ox,$oy);

Мы получаем очень, не качественно уменьшенную (или увеличенную) картинку, да и еще не качественно закомпрессированную. Например, в моем случае GD из jpeg изображения 640х480 (25 kb) при уменьшении в 200х150 создавала не качественное изображение весом всего на 20% меньше (~20kb). Хотя при уменьшеении ACDSee 5 (ACD FotoCanvas Lite 2.0) картинка занимала всего ~5 kb и при этом была отличного качества. Вы подумаете, мол сохраняй её по-человеческий, задай уровень сжатия jpeg - 80 и всё будет путем. Ан нет.
print OUT $thumb->jpeg(80);

Результат еще хуже. Размер больше изначального. Во-вторых, не внушает список функция GD. Нет, он внушает, но предназначен не много не для наших целей. С помощью GD удобно сделать надпись на точном изображении. В особенности .PNG. А например обрезать изображение, вытянуть, поменять цвета и вставить в него другое изображение с помощью GD уже не удобно. В-третьих, у нас нет возможности делать GIF изображения. В том числе анимационные .gif файлы. Что тоже хочется. Итак. Image::Magick со всем справляется великолепно. Покажу для начала пример, изменения картинки jpg.
Есть photo.jpg. Размер 640х272. Замечу что фото изначально не очень качественное. 12621 bytes.

Задача сделать чтобы она была размером 200х150.
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
#Делаем resize (изменения размера)
$image->Resize(geometry=>geometry, width=>$nx, height=>150);
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"); #Сохраняем изображение.

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

Как видите всё проще пареной репы. :)
Таким образом мы можем получить, например, из 300х180. Изображение 200х150. Что очень удобно, для сайтов с ограниченным дизайном. К примеру, если это иллюстрация к статьям, и Вы хотите чтобы картинки были одинакового размера. Есть в этом примере и один недостаток. Это - если ширина меньше 200, что изображение будет уже неодинакового размера. То есть при высоте 150 ширина будет меньше 200. Изменить этот недостаток очень легко. Нужно всего лишь проверить что больше ширина/200 или высота/150 и если больше высота/150, то изменять размер не ширины, а высоты и резать не ширину, а высоту.
Следующий пример. Выравнивает контрастность и нормализирует цвета.
use Image::Magick; #используем модуль
my($image, $x); #переменные
$image = Image::Magick->new; #новый проект
$x = $image->Read("photo.jpg"); #открываем файл
$image->Contrast(); #Контрастность
$image->Normalize(); #Нормализуем
$x = $image->Write("photo.jpg"); #Сохраняем изображение.

Получаем. 4647 bytes.

Сделаем изображение черно-белым.
use Image::Magick; #используем модуль
my($image, $x); #переменные
$image = Image::Magick->new; #новый проект
$x = $image->Read("photo.jpg"); #открываем файл
$image->Quantize(colorspace=>'gray');
$x = $image->Write("photo.jpg"); #Сохраняем изображение.


Получаем. 4159 bytes.
Очень часто нам нужно конвертировать изображения из одного формата в другой. Сделать это также легко.
use Image::Magick; #используем модуль
my($image, $x); #переменные
$image = Image::Magick->new; #новый проект
$x = $image->Read("photo.jpg"); #открываем файл jpg
$x = $image->Write("photo.png"); #Сохраняем изображение png.

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

Так мы сможем открыть gif изображение. В данном случае первый фрейм.
$x = $image->Read("photo.gif[0]");

Полный набор возможностей и инструментов Вы найдете в документации модуля. Возможности на самом деле сопоставимы с возможностями фотошопа. Но всё же, Image::Magick хорош именно для редактирования изображений. Для точных изображений, рекомендую всё же использовать GD.
Опубликовал Kest October 31 2008 18:36:03 · 0 Комментариев · 6271 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
• Фолловь меня в Твиттере!
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Swat [Исходник на...
Генетический алго...
SysInfo [Исходник...
Библия хакера 2. ...
PDF
Популярные загрузки
Простой пример ка...
Приложение Клиент...
DragMe [Исходник ...
Averaging [Исходн...
DS_Group
Pirc
Добавление басса ...
Язык программиров...
Borland Delphi 6....
Counter [Исходник...
Шкрыль А. - Разра...
Delphi 2006 - Спр...
Еext Editor
Task Shedule

Топ загрузок
Приложение Клие... 100265
Delphi 7 Enterp... 74760
WAV 1.7.1" class="side">Converter AMR<-... 20015
Borland C++Buil... 10459
GPSS World Stud... 8749
Borland Delphi ... 7442
Turbo Pascal fo... 6866
Visual Studio 2... 4864
Калькулятор [Ис... 3828
FreeSMS v1.3.1 3481
Случайные статьи
Свойства ARM
службой File Repli...
Работа с веб-серве...
• Аудит удачных и ...
Основы поисковой о...
Operand types do n...
Использование кома...
Программа Stufflt ...
Припаиваем светодиод
Выделение полосы п...
Что собой представ...
Какой недостаток у...
Запись и чтение об...
Комбинирование CSS...
functor(T,F,N)
Используйте SN MP ...
Использование комб...
Виды Интернет Рекл...
Игра ОлдБК Mmorpg.
Импортирование инф...
tld).5.
Получение XML-схем...
Game Boy, 1989 год
Выберем любимое бл...
В среде с постоянн...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?