Как узнать версию библиотеки gd


Содержание

Как узнать версию glibc в Linux

Библиотека GNU C (glibc) — это реализация стандартной библотеки C от GNU, которая является критичным компонентом инструментария GNU, используемым вместе с binutils и компилятором для сборки бинарных файлов пользовательских приложений для целевой архитектуры.

При сборке из исходного кода некоторые программы в Linux могут требовать линковки с glibc определенной версии. В этом случае вам необходимо проверить, какая версия этой библиотеки установлена у вас в системе.

Ниже два простых способа проверки версии glibc в Linux.

Способ первый

Простая команда для проверки версии библиотеки GNU C:

В этом примере установлена glibc версии 2.19.

Способ второй

Этот способ заключается в том, что можно «ввести» библиотеку glibc (т.е. libc.so.6) в командной строке, как если бы это была команда.

В выводе будет детальная информация о библиотеке, включая ее версию, а также информацию о компиляторе GNU и доступных расширениях glibc. Местонахождение glibc зависит от конкретного дистрибутива и архитектуры процессора.

PHP: установка библиотеки GD (Graphics library)

РНР не ограничивается созданием только HTML вывода. Вы можете создавать файлы изображений с помощью PHP.

Для этого просто необходимо установить GD library и вы можете создавать различные форматы изображения, такие как GIF, PNG, JPEG, WBMP, и XPM.

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

В этом посте вы узнаете , как установить PHP GD модуль на Ubuntu.

Введите следующую команду для установки этого модуля:

Теперь перезагрузите сервер Apache:

Gradle. Узнать версию библиотеки на Github

Я использую Gradle в AndroidStudio, загрузка библиотеки выглядит следующим образом compile ‘com.aaa.bbb:ccc:0.0.0’

Откуда брать версию библиотеки, то есть 0.0.0 ?

1 ответ 1

Можно использовать сервис Gradle Please или искать необходимую информацию на сайте / в файле Readme.MD библиотеки.

Gradle Please использует поиск по Maven Central Repository и если архивы библиотеки не хранятся в нём, то и найти ничего не удастся (актуально для библиотек использующих jitpack публикацию)

Скачать и попробовать!

Класс написан на PHP и является оберткой для GD. Перед использованием убедитесь, что ваша инсталляция PHP поддерживает GDlib. А та, в свою очередь, необходимые форматы изображений. Обычно PNG, JPEG (JPG) и GIF.

Со времен публикации предыдущей статьи уже много воды утекло. Библиотека стала более «взрослой» и обзавелась новыми интересными функциями. Кроме того, было исправлено множество недочетов и багов. Итак, что же новенького? Сначала просто списком, потом остановлюсь на каждом пункте подробно:

1. Изменить размер картинки, чтобы не выходила за границы прямоугольника.
2. Ватермарки теперь можно накладывать на gif и png
3. Сохранение прозрачности при работе с gif и png.
4. Появился метод склеивания нескольких картинок по горизонтали
5. Тоже самое, что и п.4, только по вертикали
6. Исправлен метод sharpen, теперь работает корректно

Ну и старые методы, которые остались:
1. Изменить размер по вертикали с сохранением пропорций
2. Тоже самое по горизонтали
3. Автоматический разворот фотографии по данным из exif

Пункт 1. Изменяем размер картинок, чтобы те не выходили за рамки воображаемого прямоугольника. Допустим у нас на страничке есть место под аватар. Пусть 100x150px. Мы загружаем исходную картинку в библиотеку и выполняем метод resampleToRectangle(100, 150). Скрипт находит у картинки наибольшую сторону, допустим это оказалась ширина. Затем, уже внутри, применяется метод resampleToWidth(100). Таким образом сохраняя пропорции, мы изменяем размер методом экстраполяции (со сглаживанием) и можем смело сохранять полученный результат в файл. Теперь наш аватар не выйдет за рамки отведенного под него размера на страничке.

Пункт 2. Раньше при наложении ватермарков на изображения типа PNG появлялись очень неприятные артефакты. Прозрачная ватермарка накладывалась с фоном и закрывала напрочь часть изображения. Конкретно об этой проблеме можно почитать здесь. Теперь же нет ограничений по типу файлов. Единственное, что библиотека не умеет, так это накладывать ватермарки и сохранять прозрачность исходной картинки. Прозрачность пропадает, к сожалению. А к счастью то, что подобная потребность крайне редка. Обычно ватермарки на полупрозрачные изображения никто не клеит.

Пункт 3. Теперь при работе с прозрачными PNG и GIF сохраняется их прозрачность. В интернете многие жалуются на появление черного фона, вместо прозрачного. Эту проблему с успехом удалось решить в текущей версии библиотеки.

Пункт 4 и 5. Иногда нужно взять несколько изображений и склеить их в одно. Либо по горизонтали, либо по вертикали. Никаких проблем! Используйте методы joinHorizontal() и joinVertical().

Пункт 6. В новых версиях GD из-за путаницы с типами данных, на старой версии стали появляться досадные искажения. Теперь проблема полностью устранена.

Заинтересовались? Прекрасно! Тогда предлагаю перейти от слов к делу и рассмотреть несколько примеров использования. В конце статьи вы найдете архив, специально подготовленный для того, чтобы вы без труда могли опробовать интересующие вас возможности, не прилагая практически никаких усилий. Помимо самой библиотеки и примеров использования, вы найдете несколько картинок. Просто распакуйте и вперед! =)

Изменяем размер картинки по высоте с сохранением пропорций. Применяем метод экстраполяции. Высокое качество, но требуется больше ресурсов.

Тоже самое, только без экстраполяции. Работает очень быстро, но появляются неприятные кубики (песок) по контурам объектов. Подойдет для первичной обработки изображения, либо для обработки не очень важного материала.

Предусмотрен точно такой же набор для уменьшения картинки по ширине resizeToWidth(), resampleToWidth(). Примеров приводить не буду, все тоже самое.

Уменьшаем изображение, чтобы оно не выходило за рамки воображаемого прямоугольника. Очень удобный метод, кроме него по сути редко когда что-то нужно. Уменьшение идет только методом экстраполяции (resample).

Теперь давайте наложим на изображение водяной знак (или ватермарк). В папке images лежит уже подготовленный PNG файл и прозрачным фоном. Перед этим можно уменьшить изображение до требуемого размера. Но не после, иначе ватермарк исчезнет. Есть возможность наложить знак на исходник. Тогда последующие преобразования будут происходить уже вместе, как с единой картинкой. Просто передайте ture вторым параметром методу watermark. (Не рекомендуется).

Соединим две картинки по горизонтали. Очередность будет зависеть от того в каком порядке загружаются исходники.

Тоже самое, но по вертикали. Соединим три картинки, сделаем ресайз и склеим с ватермарочкой.

Ватермарка у нас PNG и прозрачная. Давайте ее уменьшим, чтобы убедиться в сохранении прозрачности, вместо появления черного фона.

Забрать библиотеку с примерами!

root4root aka admin

[…] разбор xlsx (эксель) прайса для обновления цен, или ресайз большой фотографии. Случаи могут быть самыми разнообразными, когда мы не […]

gd_info

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

gd_info — Вывод информации о текущей установленной GD библиотеке


Описание

Получает информацию о версии и возможностях установленной GD библиотеки.

Возвращаемые значения

Возвращает ассоциативный массив.

Элементы массива, возвращаемого из gd_info()

Атрибут Смысловое значение
GD Version Строка string содержащая версию libgd.
FreeType Support boolean значение. TRUE , если компонент FreeType Support установлен.
FreeType Linkage Строка string содержащая описание, каким образом подключен компонент FreeType. Ожидаемые значения: ‘with freetype’, ‘with TTF library’, и ‘with unknown library’. Этот элемент будет определен, только если FreeType Support имеет значение TRUE .
T1Lib Support boolean значение. TRUE , если T1Lib поддержка включена.
GIF Read Support boolean значение. TRUE , если включена поддержка чтения ( reading) GIF изображений.
GIF Create Support boolean значение. TRUE , если включена поддержка записи ( creating) GIF изображений.
JPEG Support boolean значение. TRUE , если включена поддержка JPEG.
PNG Support boolean значение. TRUE , если включена поддержка PNG.
WBMP Support boolean значение. TRUE , если включена поддержка WBMP.
XBM Support boolean значение. TRUE , если включена поддержка XBM.
WebP Support boolean значение. TRUE , если включена поддержка WebP.

В версиях PHP ранее 5.3.0, атрибут JPEG Support назывался JPG Support.

Список изменений

Версия Описание
5.6.12 Добавлена поддержка WebP.
5.3.0 Атрибут JPG Support переименован в JPEG Support.

Примеры

Пример #1 Использование gd_info()

Результатом выполнения данного примера будет что-то подобное:

Смотрите также

  • imagepng() — Вывод PNG изображения в браузер или файл
  • imagejpeg() — Выводит изображение в браузер или пишет в файл
  • imagegif() — Выводит изображение в браузер или пишет в файл
  • imagewbmp() — Выводит изображение в браузер или пишет в файл
  • imagewebp() — Вывод изображения WebP в браузер или файл
  • imagetypes() — Возвращает список типов изображений, поддерживаемых PHP сборкой

Основы работы с библиотекой GD

Дата публикации: 2013-11-18

От автора: очень часто при разработке скриптов необходимо работать с изображениями, используя язык PHP. К примеру, генерация изображений с нуля или редактирование уже существующих и т.д. Поэтому в данном уроке мы с Вами изучим основы работы с библиотекой GD, которая предназначена для обработки изображений средствами языка PHP.

Введение

Язык PHP достаточно разнообразен и его использование не ограничивается только созданием скриптов, выполняющим различные манипуляции с данными. Он также позволяет работать с различными графическими элементами, в частности с изображениями, разных форматов. Для этих целей написана, специальная библиотека, под названием GD, которая расширяет его стандартный функционал. Данная библиотека, чем-то похожа на небольшой графический редактор, используя который, Вы сможете легко обрабатывать изображения, используя только язык PHP. Библиотека GD, позволяет создавать новые изображения, редактировать уже существующие, копировать одни изображения на другие, изменять размеры, а также наносить текст на изображения.

Поэтому, так как, библиотека является расширением, значит необходимо убедиться, что она подключена в Вашем интерпретаторе языка PHP. Для этого необходимо открыть главный конфигурационный файл PHP – php.ini. Если Вы используете Denver, значит Вам необходимо, перейти в виртуальный диск, созданный им (в моем случае это диск Z). И затем по адресу: Z:\usr\local\ php5. В корне папки php5 Вы найдете необходимый файл. Далее открываем данный файл в текстовом редакторе, находим строчку: extension=php_gd2.dll

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Если напротив данной строки, нет символа “;” (точка с запятой), значит расширение подключено, если же символ есть – его необходимо удалить и перезапустить Denver. В этом случае Вы подключите библиотеку. Теперь можно приступать к работе с данной библиотекой.

Обработка изображений средствами PHP и GD

Материал из PhpWiki.

Содержание

Сборка

Для успешного выполнения примеров из этой статьи необходимо, чтобы PHP был собран с поддержкой второй версии библиотеки GD.

Для того, чтобы узнать наличие и используемую версию графической библиотеки, воспользуемся всеми нами, без сомнения, любимой функцией phpinfo(), и взглянем на раздел «GD»:

Если ничего похожего вы не нашли — значит, PHP собран без поддержки графической библиотеки, и придется его пересобирать (или попросить об этом админа).

В противном случае, сначала взглянем на строку «GD Version». Если версия GD — первая (например, 1.6), то часть материала этой статьи вам не подойдет (и, в любом случае, рекомендую обновиться до второй версии). Вторая же версия тоже может быть разная. :) Обратите внимание на слово «bundled». Его присуствие означает, что PHP собран с библиотекой GD, поставляемой вместе с PHP: именно эту библиотеку рекомендуется использовать, так как разработчики PHP исправили множество ошибок и недочетов, присущих оригинальной GD. Впрочем, если используется внешняя библиотека (слово «bundled» в строке «GD Version» отсутствует) — ничего страшного, все приведенные ниже примеры будут работать.

В нижеследующих строках мы видим, какие графические форматы поддерживаются данной конфигурацией библиотеки GD. В частности, работа с форматом GIF поддерживается в режиме «только чтение» из-за проблем с лицензированием используемого в GIF алгоритма компрессии.

Итак, если требуется пересборка PHP, следует это и сделать, загрузив при необходимости последнюю версию PHP, и указать при сборке параметр:

Необязательный параметр location указывает путь к внешней библиотеке GD. Если его опустить (в смысле, не указывать) — используется bundled-версия.

Для поддержки работы с шрифтами TrueType, обсуждаемой в главе «Вывод текста. «, также понадобится наличие библиотеки FreeType и следующие параметры конфигурационной строки:

Примечание: Выше подразумевалось, что используется Unix-подобная ОС. Если же PHP установлен локально, да еще и под Windows — то надо просто раскомментить одну строчку в php.ini — надеюсь, догадаетесь, какую. :)

Генерация изображения с помощью PHP

Надеюсь, вы прекрасно осознаете, что нельзя вот так вот просто взять и вывести картинку посреди HTML-кода в том же самом скрипте (если не осознаете, прочтите внимательно эту статью): в HTML-документе мы разместим, как и обычно, тэг , а в его атрибуте src укажем не картинку, как обычно, а PHP-скрипт:

Теперь приступим к написанию этого самого image.php.

Заголовок. Он же header.

Прежде всего, как броузер узнает, что image.php — это не HTML-документ и не что-то еще, а картинка?

Тип документа броузер определяет по заголовку Content-type. На самом деле, этот заголовок — обязательный и всегда присуствует; по умолчанию, PHP услужливо «отдает» заголовок Content-type: text/html. Обычно это поведение PHP нам прекрасно подходит — но не в данном случае. Придется нам вывести нужный заголовок самим:

Приступим теперь непосредственно к генерации картинки.

Создание изображения

Для создания изображения, в нашем распоряжении две функции:

1. imagecreate(). С помощью этой функции можно создать изображение на основе палитры, содержащей фиксированный набор цветов. Каждый цвет палитры необходимо описать с помощью функции imagecolorallocate(). Этот способ создания изображения был единственным при работе с первой версией GD, и необходим при работе с ориентированными на палитру форматами, такими как GIF. Однако введенный во второй версии (и отныне рекомендуемый разработчиками) способ, на мой взгляд, гораздо более удобен.

2. imagecreatetruecolor(). Эта функция создает TrueColor-изображение, то есть цвет каждой точки определяется произвольным цветом, задаваемым в координатах RGB. Помимо того, что это удобнее, чем работа с палитрой, такой подход позволяет производить масштабирование изображения с гораздо меньшими потерями качества. Но об этом позже. Сейчас просто создадим изображение:


Функция imagecreatetruecolor (как, кстати, и функция imagecreate), принимает два обязательных целочисленных параметра — ширину (в нашем примере — 80 пикселей) и высоту (60 пикселей) картинки, и возвращает идентификатор ресурса (в данном случае — изображения), который мы присваиваем переменной $image, которой в дальнейшем будем постоянно пользоваться.

Если по какой-либо страшной причине (недостатке памяти, например) создать изображение не получается, функция возвращает false — в этом случае мы прерываем работу скрипта.

Хотя мы с этим изображением, пока что, ничего не делаем, мы обязаны освободить выделенную для него память с помощью функции imagedestroy(): к сожалению, автоматическое освобождение памяти происходит не всегда, и игнорирование рекомендации всегда использовать imagedestroy может привести к весьма серьезным утечкам памяти.

Немножко порисуем

Итак, с помощью функции imagecreatetruecolor() мы создали «труколорное» и, если верить документации, черное изображение размером 80×60. Так что, те, в чьи планы входит создание Web-галереи репродукций «квадрата Малевича», могут смело переходить к следующей главе. :) Для остальных, продолжим. Нарисуем на картинке что-нибудь содержательное.

Палка, палка, огуречик, вот и вышел человечек :)

Используемые для рисования функции весьма просты для понимания. Их описание (как и описание всех GD-функций) вы найдете здесь. В случае трудностей с английским, просто «поиграйтесь», меняя значения параметров — как вы, несомненно, уже догадались, это ни что иное, как координаты, и цвета в виде 0xRRGGBB.

Подробнее же мы разберем вот эту строку: imagepng($image);

Выше мы создали в памяти изображение, и всячески над ним извращались. :) Это мы делали без привязки к какому-либо выходному формату — просто работали с набором байтов в памяти. А вот функции вида imageформат (imagepng(), imagejpeg(), imagewbmp(). ) генерируют на основе этого самого набора байтов, на который ссылается идентификатор $image, картинку в соответствующем формате, и выводят ее в выходной поток — то бишь, проще говоря, в броузер.

Нелишне здесь вспомнить и о строке header(‘Content-type: image/png’), где мы указали тип документа — обратите внимание: здесь png, и там png. :) Справедливости ради, надо заметить, что большинство броузеров воспринимают только часть «image» этого заголовка, а формат самой картинки уже определяют по ее заголовкам, характерным для каждого формата; однако, лучше все же не надеяться на «интеллект» броузера и указывать правильный формат изображения.

Вывод текста

. а также диаграммы и коллекционеры марок.

Используя полученные в результате рисования смайликов знания, попробуем порисовать диаграммы, а заодно и научимся выводить на картинках текст (не забудьте только о библиотеке FreeType, о необходимости наличия которой сказано в главе «Сборка».

Предположим, вы располагаете следующей важной статистической информацией о коллекционерах почтовых марок:

. и горите желанием представить эту информацию в виде «столбиков» — для удобного сравнения. Столбики мы рисовать уже умеем — стоит только немножко вспомнить азы арифметики:

Обратите внимание на строку imagestring($image, 1, GRAPH_OFFSET_LEFT / 2, $Y — 4, $value, 0x000000); с помощью которой мы выводим числа на координатной оси. Второй параметр — один из встроенных в GD шрифтов (от 1 до 5, чем больше число — тем крупнее шрифт).

Так зачем же, скажете вы, нам какие-то там TrueType-шрифты и FreeType-библиотеки, если мы и так прекрасно пишем на картинке? А вот затем, скажу я вам, что писать-то мы хотим по-русски, а встроенные шрифты о существовании кириллицы даже и не подозревают. А нам надо бы подписать столбики именно по-русски. Да и выбор встроенных шрифтов невелик.

Итак, нам понадобится:

  • Функция imagettftext(), которая рисует выбранным TrueType-шрифтом на картинке,
  • Какой-нибудь кириллический TrueType-шрифт. Возьмем, например, arial.ttf из всеми нами любимой Винды, да не просто возьмем, а положим его туда, где лежит наш скрипт,
  • Поскольку функция imagettftext() воспринимает кодировку Unicode, но никак не Windows-1251, то нам пригодится вот такая функция для соответствующего преобразования:
  • Функция imagettfbbox(), которая поможет нам вычислить высоту и ширину выводимого шрифтом текста.

Тренировка прошла успешно — всех поприветствовали. Можно теперь приступать к нашим диаграммам.

Барабанная дробь. Запускаем.

Изменение размера

. thumbnails, или «превьюшки».

Часто перед веб-разработчиком стоит задача генерации уменьшенных копий изображений для предварительного просмотра; можно даже сказать, что это — одно из самых распространенных применений библиотеки GD.

В GD1, поддерживающей только изображения на основе палитры, присуствовала лишь функция imagecopyresized(); качество уменьшенных изображений, генерируемых этой ей, мягко говоря, оставляло желать лучшего: работая с фиксированной палитрой, ограниченной 255 цветами, весьма затруднительно обеспечить качественный антиалиасинг.

Во второй версии библиотеки, с появлением поддержки TrueColor и imagecreatetruecolor(), введена новая функция — imagecopyresampled(), обеспечивающая весьма достойное качество «превьюшек».

Продемонстрируем работу с этой функцией. Предположим, у нас есть файл original.jpg, допустим, 400×250 пикселей, и мы хотим создать ее уменьшенный вариант small.jpg — 100×60. Можно поступить так:

Этот код работает, однако искажения, получаемые при непропорциональном изменении размера, выглядят не особенно симпатично. Более того, код получился не особенно-то универсальным: мало того, что мы можем работать только с JPEG-файлами, у нас еще и жестко заданы имена файлов и размеры получаемого изображения.

Итак, пусть у нас есть файл в любом поддерживаемом GD формате, и мы хотим создать «превьюшку» заданного размера в формате JPEG. Разработаем для этой цели функцию imgResize. Комментариев здесь почти не будет — так как используются уже изученные приемы и обычная арифметика. Постарайтесь разобраться в этом коде самостоятельно.

Динамическое создание изображений средствами PHP

Динамическое создание изображений средствами PHP

В статье описывается работа с расширением PHP — GDLib, которое позволяет динамически формировать изображения на Web-страницах.

Для понимания этой статьи необходимо иметь представление об элементарных основах PHP, а также работе с изображениями.

Примечание переводчика

в примерах все названия идентификаторов даны на французском языке. Для того, чтобы облегчить читателю понимание кода, мы предлагаем их перевод:
blanc — белый
bleu — голубой
couleur — цвет
couleur_fond — цвет фона
fichier — файл
gris — серый
hauteur — высота
hauteurimage — высота изображения
largeur — ширина
largeurimage — ширина изображения
mois — месяц
noir — черный
police — гарнитура шрифта
rouge — красный
tableau — массив
vert — зеленый

Примечание переводчика

По умолчанию в PHP 5 все расширения отключены, в том числе и расширение для формирования динамических изображений — GD. Поэтому Вам необходимо включить расширение GD в файле конфигурации php.ini.


Цели : научить использовать различные функции библиотеки gd, предназначенные для динамического создания изображений.

Библиотека GD представляет собой набор функций для работы с изображениями. Благодаря ей можно не только динамически создавать собственные изображения, но и получать о них различную информацию, изменять размер и т.д.

Внимание : Прежде чем начать работу, нужно кое-что узнать. Дело в том, что существует несколько различных версий этого расширения PHP, а поставщики услуг хостинга могут отключить определенные функции, а то и всю библиотеку GD. С какой целью? Известно, что обработка изображений — это большая нагрузка на сервер.

Итак, вам необходимо узнать версию библиотеки GD установленную на используемом вами хостинге, а также получить информацию о разрешенных функциях. Первое, что следует сделать, — воспользоваться функцией phpinfo. Выполните следующий скрипт:

phpinfo.php

Если у вас появится таблица похожая на эту — все нормально (особенно если версия библиотеки новее, чем 2.0)

Как было упомянуто выше, некоторые возможности могут быть отключены. В таком случае следует просто попробовать использовать ту или иную функцию. Если это приведет к ошибке: Fatal error : Call to undefined function, — у вас не должно быть никаких сомнений, что данная функция отключена.

I) Создание холста

Для начала необходимо создать пустой холст. Сразу поясним, что в данной статье мы будем рассказывать исключительно об изображениях в формате PNG или JPG, формат GIF останется без нашего внимания. Дело в том, что этот формат перестал поддерживаться библиотекой GD, начиная с версии 1.3, правда ограниченная поддержка GIF появилась опять в версии 2. Вывод: формат PNG — выгодная альтернатива GIF

Важное замечание

Во всех учебных курсах сайта www.phpdebutant.org, скрипты имели целью динамическое создание html-страниц. На этот раз, используя библиотеку GD, мы создаем изображения, поэтому в данном случае вы должны забыть на время конструкции echo и print. По умолчанию PHP-скрипт генерирует html-страницу, что не требует уточнения в виде отправки особого http-заголовака. Но если мы создаем изображение, в самом начале скрипта необходимо указать его тип, отправкой соответствующего заголовка, например для PNG: header («Content-type: image/png»);

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

imagevide.php

Этот небольшой скрипт генерирует красный прямоугольник (очень скромное, но хорошее начало). Описание механизма:

  • Функция ImageCreate возвращает дескриптор $im. Дескриптор $im должен передаваться всем функциям прорисовки изображения. Параметры функции ImageCreate соответствуют длине и ширине создаваемого изображения (200х100).
  • Задача оператора or die — перехват возможных ошибок.
  • Создать цвет можно при помощи функции ImageColorAllocate. Она используется для
    • создания цвета и его сохранение в переменной с целью последующего использования
    • добавление цвета в палитру изображения $im

Ее параметры соответствуют красной, зеленой и синей компонентам цвета и представляют из себя целые числа от 0 до 255. В этом примере мы создали красный цвет.

Важное замечание

этот цвет соответствует цвету фона, поскольку он первым добавляется в палитру изображения

Вызов скрипта imagevide.php (пустое_изображение.php) создаст изображение в формате PNG. Для того, чтобы его использовать на web-сайте, нужно действовать так же, как и в случае с «классическими» изображениями.

Совсем несложно! Вы даже можете передавать параметры скрипту, который будет генерировать изображение (например цвет фона).

Итак, вы уже обладаете некоторыми базовыми знаниями для того, чтобы начать рисовать. Если вам хочется их углубить — вот несколько интересных функций

  • Вы можете заменить ImageCreate на ImageCreateTrueColor, чтобы создать 32 битное изображение (идеально для фотографий)
  • Вы можете заменить ImagePng функцией ImageJPEG чтобы создать изображение в формате JPEG (не забудьте поменять параметр функции header на header(«Content-type: image/jpeg»).
  • Ниже мы увидим, что сгенерированное изображение можно сохранить

II) Функции прорисовки изображения

Сначала вам необходимо знать, что любой рисунок связан с понятием координат, поэтому в этом небольшом абзаце статьи мы дадим некоторые представления об этом вопросе.
Верхний левый угол изображения имеет координаты (x=0, y=0), а нижний правый (x = ширина изображения, y=высота изображения).

Например, для изображения с разрешением 100 на 200 пикселей координаты будут такими:

Различные функции прорисовки изображения принимают в качестве параметров его координаты. Приучайтесь передавать их в требуемом порядке. Так, например, для того, чтобы нарисовать прямоугольник, необходимо передать координаты двух точек соответствующей функции (ImageRectangle). Координаты первой точки соответствуют верхнему левому углу изображения, координаты второй точки соответствуют нижнему правому углу. Не путайте аргументы, поскольку некоторые функции могут выдать ошибочные результаты.

Вот список функций, которые необходимы для прорисовки различных форм, а также для размещение текста на создаваемом изображении.
Для каждой функции вы найдете краткое описание синтаксиса и назначения.
Мы не ставим себе целью привести пример использования для каждой функции, здесь вы найдете только краткое описание. В таблице также указана версия библиотеки, начиная с которой поддерживается та или иная функция. Примеры употребления некоторых функций можно найти в разделе официального мануала, посвященного библиотеке расширения GD

$im = ImageCreate ($largeur, $hauteur)

Создает пустой холст (256 цветов) $im высотой $largeur и шириной $hauteur. (формат PNG предпочтителен)

$im = ImageCreateTrueColor ($largeur, $hauteur)

Эта функция похожа на ImageCreate но глубина цвета изображения не ограничена 256 цветами. (формат JPEG предпочтителен)

$col = ImageColorAllocate ($im, $rouge, $vert, $bleu)

Помещает в переменную $col цвет компонентами которого являются $rouge, $vert, $bleu (диапазон 0 .. 255).Подробности см. в первой части.

ImageEllipse ($im, $x, $y, $l, $h, $col)

Создает эллипс на изображении $im с центром в точке ($x,$y), шириной $l, высотой $h и цветом $col.

ImageFilledEllipse ($im, $x, $y, $l, $h, $col)

Идентична ImageEllipse, но эллипс заполняется цветом $col

ImageFill ($im, $x, $y, $col)

Создает на изображении $im прямоугольник цвета $col, расположенный между точкой с координатами ($x,$y) и нижним правым углом изображения цвета $col

ImageLine ($im, $x1, $y1, $x2, $y2, $col)

Рисует линию цвета $col, которая проходит между двумя точками с координатами ($x1,$y1) и ($x2,$y2)

ImagePolygon ($im, $points, $num_points, $col)

На изображении $im рисует многоугольник, координаты которого перечислены в массиве $points ($points[0]=$x0, $points[1]=$y0, $points[2]=$x1, $points[3]=$y1, и т. д.), $num_points — количество точек в массиве, $col — цвет.


ImageFilledPolygon ($im, $points, $num_points, $col)

Идентична ImagePolygo, но эллипс заполняется цветом $col

ImageRectangle ($im, $x1, $y1, $x2, $y2, $col)

На изображении $im рисует прямоугольник, верхний левый угол которого имеет координаты ($x0, $y0) , а правый нижний ($x1, $y1). $col — цвет прямоугольника

ImageFilledRectangle ($im, $x1, $y1, $x2, $y2, $col)

Идентична ImageRectangle, но эллипс заполняется цветом $col

ImageSetStyle ($im, $style) ImageSetBrush ($im, $brush)

Эти функции позволяют изменить стиль прочерчиваемых линий. Для более подробной информации посмотрите официальную документацию, особенно обратите внимание на пример использования функции ImageSetStyle , который также является показательным для функции ImageSetBrush

ImageSetPixel ($im, $x, $y, $col)

В изображении $im рисует точку с координатами ($x,$y) и цветом $col

ImageSetThickness ($im, $epaisseur)

Меняет толщину линий, созданных различными функциями.

ImageString ($im, $police, $x, $y, $chaine, $col)

В изображении $im создает строку $chaine с координатами (левый верхний угол) ($x,$y) цвета $col $police — размер (гарнитура) шрифта (от 0 до 5)

ImageStringUp ($im, $police, $x, $y, $chaine, $col)

Идентична ImageString , но строка выводится вертикально

III) Пример первый: статистика посещений сайта в виде графика

Чтобы применить полученные знания на практике — создадим простой скрипт-пример. Часто требуется представить статистику посещения сайта в форме гистограммы

Мы предполагаем, что вы уже разработали ту часть скрипта, которая отвечает за учет посетителей (возможно с использованием таблицы MySQL). Об ее реализации мы говорить здесь не будем, это не цель данной статьи. Допустим, что статистика посещений за каждый месяц помещена в массив $visites. В этой статье мы наполняем массив «вручную», но вы можете сделать это сами, используя данные вашей таблицы MySQL.

a) Статистика посещений: создание изображения и цвета

Начнем с создания массива, который содержит в себе статистику посещений сайта за 12 месяцев (12 элементов). Затем сгенерируем картинку разрешением 400х300 и создадим три цвета, один из которых (белый) будет цветом фона.

visites.php


b) Рисуем оси графика

Поместим горизонтальную ось времени (простая черная линия) в нижнюю часть изображения, оставив поле в 10 пикселов.

Внизу подписываем номер каждого из 12 месяцев, используя цикл for и функцию ImageString. Номера месяцев располагаются через каждые 30 пикселов, начиная с левой стороны изображения.

Наконец, проводим вертикальную линию, ось ординат статистики посещений.

c) Рисуем палочки

Теперь переходим к более сложной задаче — рисованию палочек.

Для начала нам необходимо узнать максимальное число посетителей, которое мы представим на графике. Здесь мы выбрали случайное значение — 1000, но на самом деле вам, наверное, придется его вычислять, осуществляя запрос на максимальное значение столбца вашей таблицы MySQL. Мы же сделаем проще…

Для каждого месяца необходимо вычислить высоту создаваемого прямоугольника. Для этого необходимо решить уравнение, зная что высота прямоугольника (палочки) для максимального количества посещений будет равна высоте всего изображения. Исходя из количества посещений за определенный месяц мы получаем искомую высоту

Нам остается только прорисовать каждый прямоугольник, начиная с координат его верхнего левого угла и кончая нижним правым.

Добавим количество посещений за месяц над каждым прямоугольником для улучшения гистограммы.

d) А вот и результат!

Результат, конечно, не назовешь превосходным, но следует учитывать, что нам удалось сделать что-то более или менее презентабельное, написав всего 20 строчек простого кода, что само по себе уже неплохо.

Гистограмма посещаемости по 12 месяцам.

IV) Другие полезные функции

Вот еще один набор полезных функций, предназначенных для управления цветовой палитрой, а также для получения различной информации об изображениях.

Синтаксис с ссылкой на документацию

$tableau = GetImageSize ($fichier)

«Это функция использует в качестве параметра имя файла $fichier и возвращает массив, содержащий 4 элемента: (1) $tableau[0] ширина изображения (px), (2) $tableau[1] высота изображения (px), (3) $tableau[2] тип изображения (см. документацию), (4) $tableau[3] возвращает строку, которую можно вставить в тег IMG (w

ImageColorTransparent ($im, $col)

Области изображения $im, прорисованные цветом $col становятся прозрачными. Чтобы сохранить прозрачность, используйте формат PNG

ImageCopy ($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_l, $src_h)

Копируем прямоугольную область изображения $src_im на изображение $dst_im. Область копирования ограничена координатами точки верхнего левого угла($src_x, $src_y), шириной $src_l и высотой $src_h. Скопированная область появляется в изображении-реципиенте в точке с координатами. ($dst_x, $dst_y)

ImageCopyMerge ($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_l, $src_h, $intensite)

Идентична ImageCopy, в добавок к этому функция осуществляет постепенный переход тонов интенсивностью $intensite, которая принимает значения от 1 до 100.

Выполняет те же действие, что и ImageCopy, а также производит изменение размеров изображения. Смотрите следующий пример


Идентична ImageCopyResampled, но результат масштабирования менее четок, зато функция работает быстрее.

$im = ImageCreateFromJpeg ($fichier)

Возвращает идентификатор ресурса, $im, указывающий на изображение, которое находится в файле формата jpeg $fichier.

$im = ImageCreateFromPng ($fichier)

Возвращает идентификатор ресурса, $im, указывающий на изображение, которое находится в файле формата png $fichier.

$largeur = ImageSX ($im)

Возвращает ширину изображения $im

$hauteur = ImageSY ($im)

Возвращает высоту изображения $im

V) Пример второй: генерация миниатюр (уменьшенных копий изображения)

Этот пример имеет целью создание уменьшенной копии существующего изображения. Возможно, вам придется реализовывать эту функцию при написании фотогалереи на РНР, в которой фотографии представлены в форме миниатюр, а посетитель может щелкнуть на них мышью, чтобы увеличить. В данном примере мы сгенерируем миниатюру, снабженную рамкой и некоторыми пояснениями (размер и имя изображения)

a) Начало

В отличие от первого примера, данный скрипт будет записывать изображение в файл, а не генерировать его на лету. Поэтому необходимость в отправке особого http-заголовка при помощи функции header() отпадает. Таким образом, скрипт становится «классическим» и может генерировать html.

Начнем с создания пустого холста размером 200х150, затем считаем существующее изображение (из файла) при помощи функции ImageCreateFromJpeg. Потом нам также могут понадобится размеры изображения-источника, для этого мы воспользуемся imagesx и imagesy.

miniature.php


b) Рамка

Предварительно создав несколько цветов, рисуем рамку. Чтобы упростить задачу, мы будем использовать различные оттенки серого.

Существует простой способ создания подобной рамки, который заключается в прорисовке нескольких разноцветных прямоугольников, вложенных один в другой. Начинаем с самого большого прямоугольника темного цвета (его размер совпадает с размерами изображения). Затем на него накладываем другой меньший по размерам прямоугольник, цвет которого будет более светлым и т.д.

Толщина создаваемой нами рамки — 8 пикселов.

c) Создание миниатюры

Для создания миниатюры используется функция ImageCopyResampled. Она копирует одно изображения на другое, при этом может изменять размер копируемой области. Данная функция принимает несколько параметров, значение которых очевидно. Перечислим их по порядку:

  • ($im) Изображение-реципиент
  • ($source) Изображение-источник
  • Координата х области изображения-реципиента, на которую накладывается изображение-копия.
  • Координата y
  • Координата х копируемой области изображения-источника (0 если мы хотим скопировать все изображение)
  • Координата (y)
  • Ширина копии , которая вставляется на изображение-источник ($largeurDestination-(2*8) ширина изображения-реципиента минус ширина рамки справа и слева).
  • Высота копии (проделываем те же операции, что и с шириной)
  • Ширина копируемой области изображения-источника
  • Высота копируемой области изображения-источника.

Создав миниатюру, добавим небольшой текст с информацией на нее.

Внимание

Функция ImageCopyResampled — создает большую нагрузку на сервер, не злоупотребляйте ей!

d) Сохранение результата.

Нам остается только сохранить полученный результат в файле, имя которого начинается с mini_. Это мы сделаем при помощи функции ImageJpeg.
Когда эта функция имеет только один параметр, изображение выводится в браузер пользователя. Однако если в качестве второго параметра передается имя файла, никакого вывода в браузер не произойдет, а картинка будет сохранена в указанном файле. То же правило действует для функции ImagePng

Вот результат «mini_photo3.jpg»:

VI) FAQ и заключение

Библиотека GD предоставляет широкие возможности для работы с изображениями, но они порой слишком загружают сервер (это справедливо для большинства хостингов)

Вот небольшой набор вопросов и ответов по часто встречающимся проблемам

Мое изображение не выводится, браузер ведет себя так, как будто изображение не существует.
Скорее всего ошибку следует искать в вашем скрипте. Сделайте комментарий из строки header(«Content-type: image/png») (или header(«Content-type: image/jpeg» )), а также из строки ImagePng($im) (илиImageJpeg($im) ), чтобы получить сообщение об ошибке

Скрипт долго выполняется на моем хостинге, это нормально?
Если вы используйте «тяжеловесные» функции как ImageCopyResampled, это неудивительно. У интерпретатора PHP, установленного на хостинге, и без этого работы хватает…

Цвета моего изображения искажены (или оно выводится как черно-белое), почему?
Скорее всего вы использовали функцию ImageCreate, которая ограничивает цветовую палитру 256 цветами. Чтобы преодолеть это ограничение используйте функцию ImageCreateTrueColor вместо ImageCreate.

Заканчивая данную статью, покажем результат, который можно получить, скомбинировав два примера этой статьи. Тут к гистограмме мы добавили полутона, используя тот же метод, что и в примере 2.

Результат в виде гистограммы на фоне изображения.

Как узнать, есть ли у меня библиотека gd или imagemagick?

Это может показаться действительно глупым вопросом. Я новая обработка изображений php. Я предполагаю, что в php есть только две библиотеки обработки изображений. Они называются GD/GD2 и Imagemagick. Как узнать, что я установил? или если я установлен какой-либо? У меня есть echo-ed phpinfo. Он просто говорит, что изображение GD было создано Расмусом Лердорфом, Стигом Баккеном, Джим Уинстедом, Джуни Ахто, Илья Алшанецким, Пьером-Аленом Джой, Маркусом Боергером. Я действительно смущен. Спасибо заранее.

Если вы можете перейти на консоль сервера, на котором запущен PHP, введите:

Это скажет вам, установлены или запущены GD или ImageMagick.

Это тоже хороший ответ, который помог мне. Спасибо @Class

Как узнать версию библиотеки gd

Здесь могла бы быть ваша реклама

Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel

Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.

Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо

После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..

Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.

Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.

На последок как оно происходит на форумах

Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.

Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12

Илон Маск рекомендует:  Что такое код http ответ
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL