Навигация
Главная
Поиск
Форум
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
Бип из системно... 58651
Invision Power ... 57674
Организация зап... 57473
Модуль Forms 56528
Создание отчето... 55122
Приложение «Про... 54838
Подключение Mic... 54646
Оператор выбора... 54426
ТЕХНОЛОГИИ ДОСТ... 51181
Программируемая... 47791
Пример работы с... 46939
Имитационное мо... 46882
21 ошибка прогр... 41907
Реклама
Сейчас на сайте
Гостей: 14
На сайте нет зарегистрированных пользователей

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

Информационная система - транспортный парк на Turbo Pascal (База данных)...
Сравнение двух бинарных деревьев на Turbo Pascal + отчет
Диплом RSA, ЭЦП, сертификаты, шифрование на C#

Реклама

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 Комментариев · 6281 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Графика в проекта...
Генетический алго...
Web Регистрация
EMS QuickExport S...
Trojan [Исходник ...
PCX
Переработанный пл...
Visual Basic for ...
Игра в крестики н...
Java 2. Наиболее ...
Сложный калькулятор
Создание лабиринт...
39 статьи по Delphi
Род Стивенс. Delp...
XPATComponents
Как программирова...
ShadelLabel
Text3D
AVIwriter
PCXReader. Програ...

Топ загрузок
Приложение Клие... 100273
Delphi 7 Enterp... 75211
Converter AMR<-... 20017
Borland C++Buil... 10480
GPSS World Stud... 8855
Borland Delphi ... 7481
Turbo Pascal fo... 6868
Visual Studio 2... 4868
Калькулятор [Ис... 3841
FreeSMS v1.3.1 3481
Случайные статьи
Добавляете ли вы в...
Процедуры проверки...
Построение дерева ...
Программа вычитает...
Очереди с приоритетом
Безопасность веб-с...
Алгоритмы для слож...
ВВЕДЕНИЕ В СПИСКИ
Структура программы
Еще три возможност...
Чем отличается руб...
Пример применения ...
Карта JOB
Настройка визуальн...
Повышение ссылочно...
Требования к ресур...
Что называется вир...
Как решать задачи ...
Управляющая логика
Обратная связь
6.2. Выполнение и...
Выбирайте высокое ...
Основные классы Ba...
Метод-шаблон
ShiftRow
Статистика



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


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