Полный цикл в digital

GD в PHP

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

  1. GIF
  2. PNG
  3. JPEG
  4. WBMP
  5. XBM
  6. XPM
  7. GD
  8. GD2

GD входит в состав PHP начиная с PHP версии 4.3. Вы можете запустить phpinfo(), чтобы проверить установлен ли GD, на приведенном ниже экране показано, что GD установлен:

Импорт и экспорт изображений

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

Импорт

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

Формально, для импорта из файлов и из интернета должен применяться целый набор функций, имеющих однотипные названия, где тип_расширения_файла указывает на формат изображения PNG, GIF, JPEG, WBMP, XBM, XPM, GD, GD2:

imagecreatefrom<тип_расширения_файла>

На практике я рекомендую применять связку из функций file_get_contents() + imagecreatefromstring(). Это избавляет от необходимости привязывать код к типам графических ресурсов - если в дальнейшем вам понадобится работать с JPEG вместо PNG, не нужно будет везде в коде менять названия применяемых фукций.

После выполнения скрипта в $image будет ссылка на ресурс - изображение во внутреннем формате GD:

$file = file_get_contents("test.png");
$image = imagecreatefromstring($file);

У данного способа есть и недостаток: если вам критичен пиковый объем памяти, потребляемый скриптом - используйте все-таки функции imagecreatefrom<тип_расширения_файла>(), а лучше переложите работу с изображениями на плечи специализированных пакетов типа ImageMagic.

Импорт из базы данных отличается тем, что строку для imagecreatefromstring() нужно получить не из файла, а из поля в базе данных.

Импорт из интернета может производиться при помощи fopen wrapper или при помощи CURL. Второй способ я здесь не рассматриваю, он заслуживает отдельного описания.

Чтобы иметь возможность пользоваться fopen wrapper, в php.ini должна быть установлена опция allow_url_fopen = true. В этом случае функции file_get_contents в качестве параметра можно передавать не только имя файла на локальном диске, но и URL ссылающийся на ресурс в интернете. Это может быть URL картинки на сайте, или ссылка на FTP.

$file = file_get_contents("https://hmarketing.ru/test.png");
$image = imagecreatefromstring($file);

Экспорт

Три типичных задачи экспорта - вывод изображения в браузер, экспорт в БД, экспорт в файл.

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

Чтобы вывести изображение в браузер или в файл, следует вызвать одну из функций imagejpeg(), imagegif(), imagepng(). В качестве параметра им следует передать переменную, ссылающуюся на ресурс-изображение. Второй параметр у всех функций представляет собой имя файла, в который требуется сохранить результат конвертации. Если имя файла на задано, все функции выдают изображение в выходной буфер:

imagegif($image, $filename);

Чтобы изображение правильно отобразилось в браузере, вместе с ним должны быть отправлены корректные HTTP-заголовки:

header('Content-type: image/jpeg');
imagejpeg($image);

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

ob_start();
imagejpeg($image);
$raw = ob_get_clean();

Корректный экспорт полупрозрачных PNG

Один из двух внутренних форматов библиотеки GD - позволяет задавать различную степень прозрачности для каждой точки изображения, от полной прозрачности до полной непрозрачности, с шагом 1/256.

Степень прозрачности для каждой точки задается отдельно и никак не связана с цветом этой точки. Говорят, что у информации о каждой точке изображения есть два "канала" - цветовой канал, который задает цвет точки и "альфа-канал" - который задает ее степень прозрачности.

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

Формат PNG поддерживает полноценнный альфа-канал, полупрозрачные изображения можно выводить в этом формате. Чтобы при экспорте в PNG не была потеряна информация об альфа-канале, нужно добавить перед самим экспортом два вызова специальных функций:

ob_start();
imagealphablending($image, false);
imagesavealpha($image, true);
imagepng($image);
$raw = ob_get_clean();
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг