Донецкий техникум промышленной автоматики

чаклунство ImageMagick

  1. ImageMagick - це редактор
  2. Для створення растрових зображень
  3. Для редагування растрових зображень
  4. Для включення зображень в проекти
  5. Малюнок 1. Мерлін
  6. Малюнок 2. Фото з доданим заголовком
  7. ImageMagick бібліотека для роботи із зображеннями
  8. Перетворення між популярними форматами зображень
  9. Двійковий або вихідний?
  10. Дистрибутив або спеціальна версія?
  11. Збірка ImageMagick з вихідного коду
  12. Робота користувача з зображеннями
  13. Створення зображень з нуля
  14. Малюнок 3. Вікно редактора ImageMagick
  15. Утиліти командного рядка
  16. редагування зображень
  17. Лістинг 1. Bash-сценарій для виготовлення запрошень
  18. Лістинг 2. Виклик сценарію для отримання запрошень
  19. Малюнок 4. Запрошення на котячу вечірку для тітки Рейчел.
  20. Робота з зображеннями для програмістів
  21. Використання MagickWand API на мові C
  22. Лістинг 3. Приклад програми на мові C для зміни контрастності зображення.
  23. Малюнок 5. Результати виконання програми регулювання контрастності
  24. Поширення проектів з бібліотеками ImageMagick
  25. висновок
  26. Ресурси для скачування

Робота з зображеннями для користувачів і програмістів

Англійський письменник-фантаст Артур Кларк одного разу зауважив, що «будь-яка досить розвинена технологія відрізнити від магії». Тим, хто користується сучасними передовими технологіями, важко сперечатися з тим, що наші інструменти можуть справляти враження чарівництва. Уявіть собі, що хтось з іншого часу, не настільки віддаленого, спостерігає за тим, як ми користуємося сучасними технологіями - вимовляючи одне заклинання за іншим, коли фотографуємо, передаємо, обробляємо і, нарешті, роздруковуємо фотографії своїх друзів, близьких, домашніх тварин , робочого місця або навіть самих себе.

ImageMagick - це барвисте загальна назва набору програм, які дозволяють створювати, редагувати, поєднувати і перетворювати цифрові зображення більш ніж 100 різних форматів. Самі інструменти складаються з окремих програм і бібліотек, надаючи найширші можливості для роботи з зображеннями, як оперативні, так і програмні.

Ця стаття присвячена головним чином використання утиліт командного рядка convert і display. ImageMagick - це великий набір інструментів, і до кінця цієї статті читач повинен отримати гарне уявлення про нього.

ImageMagick - це редактор

Взагалі кажучи, комп'ютерна програма, яка називається редактором, призначена для створення, зміни та збереження цифрових даних певного типу. Існує багато редакторів, як і різних типів цифрових даних. Є текстові редактори для документів, коду програм і сценаріїв, популярними прикладами яких служать Vi і Emacs. Є редактори аудіо, такі як Audacity і Wavosaur. ImageMagick є спеціалізованим редактор для редагування графічних зображень.

Для створення растрових зображень

Як і багато інших графічні редактори, ImageMagick пропонує інтерактивну середу редагування зображень. Але ж у ImageMagick є всеосяжні інтерфейси прикладних програм (API) для багатьох стандартних мов програмування. Спільнота програмістів ImageMagick пропонує масу корисних програм для редагування зображень з тієї чи іншої функціональністю.

Для опису функціональності маніпуляцій з зображеннями краще підходять малюнки, ніж слова, і на Web-сайті ImageMagick пропонується відмінний набір малюнків, які ілюструють результат кожної з функцій по обробці зображень. (Див. Посилання на додаткові відомості по роботі з зображеннями в розділі ресурси .)

Для редагування растрових зображень

Сьогодні широко використовуються більше сотні форматів графічних зображень, тому для спрощення процесу редагування існуючих зображень в ImageMagick входить програма convert, яка не тільки конвертує файли з одного формату в інший, а й перетворює зображення в форму, оптимізовану для самого інтерактивного редактора ImageMagick.

Для включення зображень в проекти

Оскільки одна з переваг ImageMagick - підтримка сценаріїв, користувач може писати сценарії, що полегшують включення зображень в його проекти. Один із прикладів - набір маркетингових зображень, які автоматично забезпечуються персональними даними клієнта - такими як ім'я, адреса, телефон і т.п.

Щоб побачити цю можливість в дії, розглянемо просту фотографію належить моїй дочці і зятю кота з відповідною кличкою Мерлін ( малюнок 1 ).

Малюнок 1. Мерлін
Робота з зображеннями для користувачів і програмістів   Англійський письменник-фантаст Артур Кларк одного разу зауважив, що «будь-яка досить розвинена технологія відрізнити від магії»

Щоб забезпечити зображення красивим заголовком, я скористаюся такою командою:

$ Convert bMerlin.jpg -font Ubuntu-Bold-Italic \ -pointsize 56 -fill blue -annotate + 25 + 70 \ 'Merlin, the Wizard of Cats' NewMerlin.jpg

Примітка. Якщо в системі немає шрифту Ubuntu Bold Italic, використовуйте наступну команду для отримання списку доступних шрифтів:

$ Convert -list font

Після обробки зображення ви отримуєте фото, показане на малюнку 2 .

Малюнок 2. Фото з доданим заголовком

Як бачите, чаклувати за допомогою ImageMagick зовсім не важко. Потрібна тільки практика, щоб освоїти інструмент. Програмісти, тобто чарівники, які створили ImageMagick, виконали велику роботу з документування свого інструменту на Web-сайті. Я закликаю вас відвідати його і закріпити те, що ви дізнаєтеся з цієї статті. (Див. Розділ ресурси )

ImageMagick бібліотека для роботи із зображеннями

Бібліотека програміста з функціями цього потужного інструменту більш ніж всеосяжна. За допомогою знайомих мов програмування можна скористатися наявними можливостями ImageMagick через прості API, свої для кожної мови. Програмованість ImageMagick - від простих bash-сценаріїв для команд ImageMagick до виконання функцій API для таких мов, як C або Perl, - відрізняє його від багатьох інших інструментів для роботи з графікою.

Можна використовувати інтерактивний редактор для точного налаштування окремого зображення або для внесення наскрізних змін в безліч зображень. Можливість використання різноманітних інструментів редагування робить його незамінним.

Перетворення між популярними форматами зображень

Існує більше ста різних графічних форматів файлів цифрових зображень. ImageMagick дозволяє приручити цього звіра складності.

ImageMagick встановлюється на багато операційні системи. Є функціональні версії для Windows®, UNIX® і Linux®, Mac OS X і Apple iOS. У цій статті розглядається версія для Ubuntu Linux. Щоб завантажити вихідний код або переважну двійкову версію системи, звертайтеся за посиланням в розділі ресурси .

Двійковий або вихідний?

Як і у випадку багатьох систем ПЗ з відкритим вихідним кодом, при отриманні програми ви стикаєтеся початковим вибором: компілювати її з вихідного коду або завантажити двійкову версію, вже скомпільовану спеціально для вашої системи. У обох методів є свої переваги, але я вибираю побудова системи з початкового коду.

Дистрибутив або спеціальна версія?

Кожен дистрибутив (або distro) пропонує свій метод додавання вбудованих довічних файлів. Щоб встановити ImageMagick на дистрибутиви, висхідні до Debian Linux, такі як Ubuntu, можна використовувати один з менеджерів пакетів на базі графічного інтерфейсу користувача, такий як Synaptic Package Manager, або працювати з командного рядка, ось так:

$ Sudo apt-get install imagemagick

Можна також налаштувати ImageMagick на свій смак, наприклад, змінивши місце розташування файлів конфігурації або якісь унікальні налаштування збірки. Для цього використовуйте параметри командного рядка при складанні ImageMagick з вихідного коду. Список цих параметрів можна отримати за допомогою команди configure:

$ ./Configure --help

Багато з цих опцій бувають корисні, коли стикаєшся з труднощами при складанні коду на своїй машині.

Збірка ImageMagick з вихідного коду

Процес складання більшості програми з відкритим вихідним кодом для комп'ютерів на платформі * nix включає в себе три команди, і ImageMagick - не виняток. Ось ці стандартні команди:

$ ./Configure

Завдання сценарію configure - створити спеціальний файл Makefile для наступного кроку. Він методично виконує ряд кроків щодо визначення конфігурації вашої машини, а потім або повідомляє, що не вистачає чогось важливого, наприклад, необхідної бібліотеки, або говорить, що все це добре, і Makefile успішно створений. $ Make Makefile, створений на попередньому кроці, використовується програмою make для складання всіх програм, що становлять ImageMagick, разом з відповідною документацією. $ Sudo make install Остання команда копіює програми, документацію і пов'язані з ними файли даних в їх постійне місце, де всі користувачі системи зможуть їх знайти. Зазвичай це каталог / usr / local / bin.

Робота користувача з зображеннями

ImageMagick схожий на інші графічні редактори тим, що містить інтерактивну програму для редагування зображень. Викликавши її, можна отримати доступ до керованим за допомогою меню інструментів для роботи з зображеннями.

Створення зображень з нуля

Інтерактивний редактор ImageMagick викликається з командою display із зазначенням відповідного імені файлу або без нього. Інтерфейс нагадує багато інших програм для малювання, простий у використанні і управляється за допомогою меню.

Введіть команду display. З'явиться вікно, зображене на малюнку 3 .

Малюнок 3. Вікно редактора ImageMagick

Клацніть у вікні, виберіть з меню File> New, щоб приступити до створення растрового зображення. Вам буде запропоновано ввести геометрію зображення, а потім колір фону. При введенні геометрії можна використовувати градації кольорів фону.

Утиліти командного рядка

ImageMagick містить безліч утиліт командного рядка. Ось короткий список:

  • animate. Анімує послідовність зображень
  • compare. Позначає відмінності в зображеннях
  • composite. Створює накладення, поміщаючи одне зображення поверх іншого
  • conjure. Виконує сценарії, написані на мові сценаріїв Magick
  • convert. Перетворює один формат зображення в інший
  • display. Інтерактивний графічний редактор
  • identify. Описує файл зображення
  • import. Корисна для захоплення екрану або вікна
  • mogrify. подібна convert
  • montage. Те ж, що і composite, з підтримкою декількох зображень і інших ефектів
  • stream. Інструмент для створення сценаріїв потокової порядкової передачі зображень

Створивши полотно, можна почати роботу з інструментами малювання, щоб прикрасити його. Виберіть Image Edit> Draw. Режим зміниться, і ви побачите нове меню, а курсор полотна стане вести себе по-іншому. Виберіть інструмент малювання і покладіть на полотно свої ідеї. Залишивши інструменти малюнка і кольору, можна додавати спеціальні ефекти - творіть.

редагування зображень

Зображення можна редагувати різними способами. Команда display image-name дозволяє використовувати інтерактивний редактор, описаний вище, але для роботи з зображеннями можна застосовувати і інші інструменти. Так, програма convert надає можливість конвертувати файл зображення в інший загальноприйнятий графічний формат, який підходить для різних середовищ.

Щоб побачити, як це робиться, ми скористаємося програмою для створення серії запрошень на "котячу вечірку". Програма має форму bash-сценарію, тому запустимо xterm і створимо перший файл:

$ Touch catcards $ chmod a + x catcards

Зробивши створений файл виконуваним, можна відкрити свій улюблений редактор програм (наприклад, Vi або Emacs) і набрати в файлі catcards програмний код bash-сценарію, наведений в лістингу 1 .

Лістинг 1. Bash-сценарій для виготовлення запрошень

--- #! / Bin / bash # Bash-сценарій catcard для демонстрації ImageMagick і генерації запрошень на # котячу вечірку. # 20111115 by Bill Zimmerly. # Команда seq для створення послідовності чисел. SEQ = `which seq` # Створення файлу гостей. Виключіть це, якщо імена «гостей» знаходяться в зовнішньому файлі. # (Важливе зауваження: «cat» в цьому сценарії не має нічого спільного з кішками!) Cat> guests << EOF Grandma Aunt Linda Uncle Dave Aunt Rachael Uncle Joe Uncle Myk EOF # Зчитування списку гостей в масив а. # Примітка. IFS - це значення роздільник полів, яке в даному випадку ПОВИННО # бути задано для рядків. old_IFS = $ IFS IFS = $ '\ n' a = ($ (cat guests)) echo "Generating $ (($ {# a [@]})) invitations to:" # Створення запрошень. for i in $ ($ SEQ 0 $ (($ {# a [@]} - 1))) do # Використання base = 1 для підрахунку гостей і виведення їх числа на консоль. j = i ((j + = 1)) echo $ j. $ {A [$ i]} # Підготовка імені файлу. echo "Merlin" $ j ".jpg"> filename # Підготовка тексту запрошення. echo $ {a [$ i]} ", I love you and"> text1 echo "I want you to come to my"> text2 echo "cat party to scratch my belly." > Text3 echo "Sincerely,"> text4 echo "Merlin"> text5 # Створення нової картки командою ImageMagick convert. convert bMerlin.jpg \ -font Ubuntu-Bold-Italic \ -pointsize 24 -fill blue \ -annotate + 25 + 40 $ (cat text1) \ -annotate + 25 + 70 $ (cat text2) \ -annotate + 25 + 100 $ (cat text3) \ -annotate + 25 + 130 $ (cat text4) \ -annotate + 25 + 160 $ ​​(cat text5) \ $ (cat filename) done # Відновлення значення роздільник полів і очищення тимчасових файлів. IFS = $ old_IFS rm guests rm filename rm text1 rm text2 rm text3 rm text4 rm text5 exit 0 ---

Клацніть правою кнопкою на зображенні кота Мерліна ( малюнок 1 ) І збережіть його в каталозі зі сценарієм catcards. (Сценарій catcards використовує цей файл зображення в якості даних).

Нарешті, запустіть сценарій і перерахуйте створені файли, як показано в лістингу 2 .

Лістинг 2. Виклик сценарію для отримання запрошень

$ ./Catcards Generating 6 invitations to: 1. Grandma 2. Aunt Linda 3. Uncle Dave 4. Aunt Rachael 5. Uncle Joe 6. Uncle Myk $ ls Merlin *

Зверніть увагу, що в каталозі з'явилося шість нових зображень. Виведіть кожне зображення на екран за допомогою команди ImageMagick display і подивіться, чим вони відрізняються один від одного:

$ Display Merlin1.jpg. . . Etc.

Наприклад, на малюнку 4 показано запрошення для тітки Рейчел.

Малюнок 4. Запрошення на котячу вечірку для тітки Рейчел.

Цю програму легко змінити так, щоб вона створювала рекламні проспекти або індивідуальні графіки для всіх ваших клієнтів.

Робота з зображеннями для програмістів

Програмісти можуть використовувати функціональність для роботи з зображеннями двома способами: через API MagickWand на мові C або API MagickCore.

Використання MagickWand API на мові C

Як приклад автори ImageMagick створили програму для підвищення контрастності зображення Мерліна (див. Розділ ресурси ). Її код приведений в лістингу 3 .

Лістинг 3. Приклад програми на мові C для зміни контрастності зображення.

--- #include <stdio.h> #include <stdlib.h> #include <math.h> #include <wand / MagickWand.h> int main (int argc, char ** argv) {#define QuantumScale (( MagickRealType) 1.0 / (MagickRealType) QuantumRange) #define SigmoidalContrast (x) \ (QuantumRange * (1.0 / (1 + exp (10.0 * (0.5-QuantumScale * x))) - 0.0066928509) * 1.0092503) #define ThrowWandException (wand) \ {\ char \ * description; \ \ ExceptionType \ severity; \ \ Description = MagickGetException (wand, & severity); \ (Void) fprintf (stderr, "% s% s% lu% s \ n", GetMagickModule (), description); \ Description = (char *) MagickRelinquishMemory (description); \ Exit (-1); \} MagickBooleanType status; MagickPixelPacket pixel; MagickWand * contrast_wand, * image_wand; PixelIterator * contrast_iterator, * iterator; PixelWand ** contrast_pixels, ** pixels; register ssize_t x; size_t width; ssize_t y; if (argc! = 3) {(void) fprintf (stdout, "Usage:% s image sigmoidal-image \ n", argv [0]); exit (0); } / * Читання зображення. * / MagickWandGenesis (); image_wand = NewMagickWand (); status = MagickReadImage (image_wand, argv [1]); if (status == MagickFalse) ThrowWandException (image_wand); contrast_wand = CloneMagickWand (image_wand); / * Управління контрастністю методом сигмоидальной нелінійності. * / Iterator = NewPixelIterator (image_wand); contrast_iterator = NewPixelIterator (contrast_wand); if ((iterator == (PixelIterator *) NULL) || (contrast_iterator == (PixelIterator *) NULL)) ThrowWandException (image_wand); for (y = 0; y <(ssize_t) MagickGetImageHeight (image_wand); y ++) {pixels = PixelGetNextIteratorRow (iterator, & width); contrast_pixels = PixelGetNextIteratorRow (contrast_iterator, & width); if ((pixels == (PixelWand **) NULL) || (contrast_pixels == (PixelWand **) NULL)) break; for (x = 0; x <(ssize_t) width; x ++) {PixelGetMagickColor (pixels [x], & pixel); pixel.red = SigmoidalContrast (pixel.red); pixel.green = SigmoidalContrast (pixel.green); pixel.blue = SigmoidalContrast (pixel.blue); pixel.index = SigmoidalContrast (pixel.index); PixelSetMagickColor (contrast_pixels [x], & pixel); } (Void) PixelSyncIterator (contrast_iterator); } If (y <(ssize_t) MagickGetImageHeight (image_wand)) ThrowWandException (image_wand); contrast_iterator = DestroyPixelIterator (contrast_iterator); iterator = DestroyPixelIterator (iterator); image_wand = DestroyMagickWand (image_wand); / * Запис зображення і його видалення. * / Status = MagickWriteImages (contrast_wand, argv [2], MagickTrue); if (status == MagickFalse) ThrowWandException (image_wand); contrast_wand = DestroyMagickWand (contrast_wand); MagickWandTerminus (); return (0); } ---

Якщо ввести цей вихідний код в файл contrast.c, то для побудови програми можна використовувати наступну команду contrast:

$ Cc `MagickWand-config \ --cflags --cppflags` \ -O2 -o wand wand.c \` MagickWand-config --ldflags --libs`

Коли команда contrast готова, і її можна використовувати для збільшення контрастності зображення Мерліна ось так:

$ ./Contrast bMerlin.jpg MerlinX.jpg

Порівняйте зображення на малюнку 5 з попередніми зображеннями Мерліна.

Малюнок 5. Результати виконання програми регулювання контрастності

API MagickCore

API MagickCore - це низькорівневий інтерфейс між бібліотеками обробки зображень і програмами. Він призначений головним чином для системних програмістів і забезпечує базову функціональність, зазвичай невидиму на більш високих рівнях: ініціалізацію середовища, створення примірників об'єктів, обчислення перетворення Фур'є і т.п.

Поширення проектів з бібліотеками ImageMagick

ImageMagick поширюється по ліцензії ПЗ з відкритим вихідним кодом Apache 2.0, яка пред'являє кілька особливих вимог до тих, хто має намір використовувати її в своїх проектах. Якщо коротко, потрібно включити повну копію ліцензії в дистрибутив свого проекту і дати чітке посилання на Apache Software Foundation. Див. Посилання на повну інформацію про ліцензії Apache 2.0 в розділі ресурси .

висновок

У сфері редакторів зображень ImageMagick виділяється як потужний інструментарій програміста для створення і редагування файлів зображень. Як показано в попередньому bash-сценарії і прикладах коду на мові C, цей всеосяжний і корисний інструментарій дозволяє чаклувати над проектами, пов'язаними з графікою.

Ресурси для скачування

Схожі теми

Підпишіть мене на повідомлення до коментарів

Дистрибутив або спеціальна версія?
Двійковий або вихідний?
Дистрибутив або спеціальна версія?