Php і gd library - робота з графікою - php

У цій статті розглянуті питання роботи в PHP c графічною бібліотекою GD library - відкриття, висновок на екран і збереження зображень.

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

Для початку переконайтеся, що у вас встановлена ​​бібліотека GD library - просто запустіть скрипт з функцією phpinfo (); В результаті виконання скрипта буде виведена інформація про цю бібліотеці (міститься в блоці gd):

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

Як бачите, функція imagecreatefromjpeg () використовується просто для відкриття зображення типу JPEG, але не виведення його на дисплей. Змінна $ im містить шлях до зображення. Якщо зазначеного файлу не існує, то видається повідомлення "Не вдається відкрити зображення".

Якщо ж ви хочете відкрити зображення не JPEG, а, наприклад, GIF, то потрібно викликати іншу функцію:

Але може ви вже здогадалися, що у даного методу відкриття файлів є один недолік. Проблема в тому, що не завжди є можливість знати тип файлу, що відкривається, що знижує функціональність скрипта.

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

Відкриття файлів різних типів

Наша універсальна функція може відкривати різні типи графічних файлів шляхом визначення розширення файлу:

Але навіть це рішення не вирішує всіх проблем: а що робити, якщо у файлу розширення задано неправильно? Адже JPG зображенні можна запросто дати розширення GIF (test_jpg.gif) або GIF картинку назвати 'test_gif.txt'.

Рішення буде наступне - перебір можливих способів відкриття файл функцією imagecreate (). Адже типів графічних файлів (найбільш поширених) не так і багато, що дозволяє досить швидко точно визначити цей самий тип.

Ось приклад такого скрипта:

Як бачите, ідея досить проста - ми просто по черзі викликаємо функцію imagecreate () до тих пір, поки не визначимо тип графічного файлу.

Ще можна визначити тип файлу через функцію getimagesize () - вона повертає масив, який містить інформацію про фото - [width, height, imageType] (ширина, висота, тип файлу) - більш детально про цю функцію - getimagesize.

Тепер, коли ми знаємо як правильно відкрити зображення, розглянемо функції його обробки.

Висновок на екран і збереження зображення

Після того, як ви відкриєте зображення і справите з ним маніпуляції, природно є бажання подивитися результати роботи. Для цього існують спеціальні функції, такі як imagegif () і imagejpeg ().

Ось приклад їх використання:

Якщо ви виконаєте цей скрипт за вказаною вище посиланням, то результат вас здивує: замість зображення ви можете побачити лише набір незрозумілих символів - це буде в браузері Opera і Mozilla Firefox, браузери на движку IE (cам Internet Explorer, Avant і Maxton) вміють коректно визначати тип файлу, що відкривається.

Відбувається це з тієї простої причини, що ми не відправили в браузер коректного поля заголовка Content-Type header. Адже за замовчуванням стоїть тип 'text / html', ось тому браузери неправильно визначили тип файлу - замість зображення вивели на екран текстовий файл. Що з цього вийшло, ви вже бачили.

Для вирішення цієї проблеми необхідно задати формат даних явно за допомогою поля заголовка Content-Type:

Якщо ви тепер запустіть цей скрипт, то побачите, що зображення відображається коректно у всіх браузерах. Також є можливість зберегти картинку на жорсткий диск. Ще можна явно задати ім'я зберігається картинки - для цього використовується другий аргумент у функції imagejpeg ().

Ось як це виглядає:

В результаті виконання скрипта в вашій папці з'явиться файл my_image.jpg. Оскільки в даному випадку ми не виводимо зображення на дисплей, то і відправляти явно поле заголовка не обов'язково.

Ось ще кілька практичних прикладів використання бібліотеки GD library

За допомогою функції imagepolygon () можна створювати полігон (багатокутник).

bool imagepolygon (resource image, array points, int num_points, int color)

imagepolygon () створює багатокутник на зображенні.

image - вказує на зображення, на якому буде намальований багатокутник

points - це PHP-масив, що містить вершини полігону, тобто points [0] = x0, points [1] = y0, points [2] = x1, points [3] = y1, і т.д.

num_points це загальна кількість вершин.

color - колір ліній багатокутника, задається функцією imagecolorallocate ()

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

Php і gd library - робота з графікою - php

Використовуючи бібліотеку GD Library за допомогою функції imagerotate () можна обертати зображення на заданий кут.

resource imagerotate (resource src_im, float angle, int bgd_color)

Здійснює поворот зображення src_im на кут angle.

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

Конвертація зображення в сірий колір (півтонове)

Php і gd library - робота з графікою - php

Php і gd library - робота з графікою - php

Трохи теорії, щоб були зрозумілими алгоритми перетворення зображення з кольорового (RGB) в сіре (YIQ):

YIQ колірна модель (YIQ color model)

Кожен колір в моделі YIQ задається за допомогою установки значень трьох параметрів: Y ​​- інтенсивності (luminance,) і двох цветностей I і Q, що дозволяють спільно управляти виробництвом кольору за допомогою зеленого, синього, жовтого і пурпурного кольорів.

Так установка мінімальних значень I і Q (0, 0) призводить до отримання зеленого кольору, а установка їх максимальних значень (255,255) дає пурпурний колір. Кожна з компонент YIQ моделі може змінюватися в діапазоні від 0 до 255.

Перша частина скрипта виконує функції підготовки зображення до конвертації кольору:

Генерація чорно-білої картинки

У коді присутня два циклу for для обходу всього зображення по координатам Y і X.

За допомогою функції imagecolorat () повертаємо індекс кольору пікселя в колірній палітрі, який знаходиться на зображенні (змінна $ source) в точці з координатами x. y (змінні $ x. $ y).

Далі йде виклик функції yiq () для перетворення кольорів зображення в сірі тони. В самому кінці використовується функція imagesetpixel () для малювання пікселя заданим кольором в точці з координатами x. y на зображенні image.

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

Схожі статті