Sdscompany.ru

Компьютерный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php создание изображения

Создание изображений в PHP

Когда я начинаю рассказывать о создании изображений в PHP, многие спрашивают: «А причём здесь PHP, ведь это работа скорее дизайнеров, нежели программистов?«. И всега приходится объяснять, что PHP позволяет генерировать изображения. Ключевое слово — «генерировать«. Какие могут быть примеры генерации изображений в PHP? Например, генерация графиков по заданным пользователям функциям, графики зависимости посещаемости сайта от времени, различные сервисы для рисования изображений прямо в браузере (разумеется, с последующим сохранением и загрузкой на сервере) и другие различные примеры. И в этой статье мы разберём основные принципы создания изображений в PHP.

Данная статья будет вводная, поэтому разберём с Вами определённый HelloWorld при работе с изображениями:

Здесь имеется много нюансов, поэтому подробным образом объясню каждую строку примера:

  • imageCreate(int $width, int $height) — эта функция возвращает идентификатор изображения шириной width и высотой height. Если объяснить более понятным языков, то Вы этим действием создаёте «чистый холст для рисования».
  • imageColorAllocate(resource $image, int $red, int $green, int $blue) — функция возвращает идентификатор цвета со следующими составляющими: красной (red), зелёной (green), синей (blue). В нашем случае мы взяли красную и зелёную составляющую по максимуму (255). В результате, был получен жёлтый цвет.
  • imageFilledRectangle(resource $image, int $x1, int $y1, int $x2, int $y2, int $color) — эта функция рисует закрашенный прямоугольник на холсте image с координатами левого верхнего угла — x1 и y1, и координатами правого нижнего угла — x2 и y2, и цветом color.
  • imageSX(resource $image) — возвращает ширину изображения image.
  • imageSY(resource $image) — возвращает высоту изображения image.
  • header($string) — функция, которая посылает заголовок серверу. В данном случае мы сообщили, что наш контент имеет тип «image/jpeg«. Это очень важная строка, и из-за её отсутствия очень часто возникают ошибки.
  • imageJpeg(resource $image) — эта функция «выбрасывает» изображение image на экран. То есть в предыдущей строке мы сообщили серверу, что сейчас будет отправлено изображение, а уже этой строкой отправили само изображение.
  • imageDestroy(resource $image) — уничтожение изображения image. Всегда надо использовать эту функцию, чтобы освободить память на сервере.

Фактически, пример выше — это HelloWorld при работе с изображениями. Здесь каждая строчка очень важна и при удалении любой строки — работа, как минимум, станет непредсказуемой, а, скорее всего, скрипт перестанет работать. В следующей статье мы продолжим заниматься созданием изображением в PHP, поэтому советую подписаться на обновления, чтобы не пропустить её.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 6 ):

    Михаил, подскажите пожалуйста: стоит задача сделать красивые шрифты для кнопок на сайте, естественно они не стандартны; при этом при наведении курсора цвет их должен изменяться. Я нарисовал в CorelDraw нужные кнопки с прозрачным фоном, можно сохранить в любом векторном/растровом формате. Я так понимаю, что самый простой способ — это проеобразовать изображение в html или php код. Есть ли программы или сайты, где это можно сделать? Или, может быть, подскажете, как эту задачу реализовать, вся сложность в том, чтобы менять цвет при наведении курсора.

    Ничего преобразовывать не нужно, достаточно вставить через img, либо через свойство background в CSS.

    Здравствуйте, Михаил. 2 вопроса: 1. Как при рисовании таких изображений использовать данные из Mysql (т.е. например, использовать SELECT и подставлять необходимые данные). 2.Как сохранять такие изображения в MySQL (какого типа поля использовать, как сохранять, как вытаскивать, как пути указать). Спасибо

    Именно так и делается. Сначала селектом выводится то, что нужно, затем на основе этих данные рисуется картинка. А чтобы сохранять картинки в базу, нужно создать в таблице отдельно поле типа BLOB. Только в базе картинки обычно не хранят, кроме того в настройках сервера может быть запрещена работа с такими объемными файлами.

    как добавить иконку в оглавие страницы как у вас земной шар в оглавлении и «Создание изображений в php» заранее спасибо

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

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

    Эта статья рассчитано на программистов со средним уровнем знания PHP.
    Введение

    PHP не только идеально подходит для вывода HTML страниц, но также включает в себя мощные средства создания изображений «на лету». Приведу лишь несколько примеров:

    * Создание кнопок с надписями, текст которых хранится в базе данных
    * Графическое отображение статистических данных
    * Создание различных графиков и диаграмм

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

    Цель этой статьи

    В статье освещаются следующие вопросы:

    * Что такое заголовки (headers)
    * Использование функций библиотеки GD для динамического создания изображений средствами PHP
    * Использование HTTP заголовков для указания браузеру, что вывод PHP-скрипта представляет собой изображение

    Создание заголовка

    По умолчанию, PHP выводит один заголовок: Content-type: text/html, означающий, что результатом работы скрипта является HTML код

    Как видите, PHP выводит Content-type: text/html и пустую строку, прежде чем выводить результат работы скрипта . Все до пустой строки является заголовком HTTP. Заголовок содержит информацию для браузера и не отображается на экране.

    Используемый по умолчанию заголовок Content-type: text/html показывает, что выводится HTML код, который браузер должен обработать. Если изменить его скажем на Content-type: text/plain, то браузер будет воспринимать документ просто как текст и выводить его «как есть» Для вывода заголовков в PHP используется функция header().

    Конечно, послать заголовок недостаточно, нужно еще и позаботиться о том, чтобы вывести данные в нужном формате. Не следует думать, что, просто послав заголовок Content-type: application/zip и выведя «Всем привет», вы сможете открыть результат работы такого скрипта с помощью WinZip’а.

    Читать еще:  Html hello world

    Примечание Web-сервер перед отправкой данных клиенту может добавлять и другие заголовки помимо Content-type, их рассмотрение выходит за рамки данной статьи.

    Что нам потребуется

    Создание изображений в PHP требует наличия библиотеки GD написанной Thomas Boutell . (http://www.boutell.com/gd) Поддержка этой библиотеки включается при компиляции PHP с опцией —with-gd. Для работы с TrueType шрифтами также может понадобиться библиотека FreeType (http://www.freetype.org). Установка обеих библиотек подробно описана в соответствующей документации.

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

    Генерация изображения состоит из трех основных этапов:

    * Создание изображения
    * Отрисовка изображения
    * Вывод полученной картинки в браузер

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

    Перед тем, как что-либо рисовать, необходимо зарегистрировать цвета, которые вы собираетесь использовать. Для этого предназначена функция ImageColorAllocate(). Этой функции передаются идентификатор изображения и три числа, задающие цвет (RGB — red, green, blue). Функция возвращает идентификатор цвета, который используется в последующих операциях отрисовки изображения.
    Пример:

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

    И, наконец, вывод изображения осуществляется вызовом функции ImagePNG() или ImageGIF(). Последняя не поддерживается в текущей версии GD из-за проблем с лицензированием (разработчики GD обещают возобновить поддержку формата GIF после 7 июля 2004 года, когда истечет срок действия патентов Unisys на алгоритм сжатия LZW, используемый в GIF. Уже после написания этой статьи в библиотеку была включена поддержка форматов JPEG и WBMP. -прим. переводчика). ImagePNG() преобразует внутреннее представление изображения в PNG файл и посылает его клиенту. Аналогично работает и ImageGIF(), но используя формат GIF. Перед использованием функций ImagePNG() или ImageGIF() необходимо послать соответствующий заголовок Content-type
    Формат Заголовок
    PNG «Content-type: image/png»
    GIF «Content-type: image/gif»

    Примечание Заголовки относятся ко всему документу. То есть если вы послали заголовок, показывающий, что вы выводите изображение, вы не можете выводить текст. А после того, как вы вывели первый байт данных, заголовок уже нельзя изменить! Это значит, что сначала нужно вызвать header() и только затем начинать вывод данных, иначе вы получите сообщение об ошибке. Если вы не посылаете заголовок Content-type, PHP автоматически посылает Content-type: text/html как только вы начинаете вывод данных.

    Как это выглядит на практике

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

    Теория биоритмов гласит, что эмоциональная, физическая и интеллектуальная активность каждого человека циклически изменяются с определенными интервалами. В момент рождения, все три кривые выходят из нулевой точки и изменяются в течение всей жизни. Если кривая проходит выше нулевой отметки — это активная фаза, ниже — пассивная. Момент пересечения нулевой отметки означает критический день: вы подвержены риску эмоциональной, физической или интеллектуальной «катастрофы». А в тот день, когда все три кривые проходят через ноль, лучше вообще воздержаться от работы над важными PHP проектами.

    У каждой кривой собственный цикл:

    * Физическая: 23 дня
    * Эмоциональная: 28 дней
    * Интеллектуальная: 33 дня

    Кривые представляют собой синусоиды, поэтому для вычисления значений биоритмов мы можем воспользоваться встроенной функцией sin()

    Установка даты рождения

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

    * Проверяем, была ли введена дата рождения.
    * Если нет, отображаем форму для ввода даты
    * После проверки правильности ввода вычисляем сколько дней человек прожил до текущей даты используя юлианский календарь.

    Совет Для вычисления мы используем юлианский календарь. Дата рождения и текущая дата переводятся в количество дней по юлианскому календарю. Разность этих двух чисел дает искомый результат.

    Примечание В этом примере функция gregorianToJD() реализована на PHP (см. полный код скрипта ниже). Вообще-то, эта функция реализована в календарном модуле PHP, но на момент написания этой статьи эта функция работала некорректно в последней версии PHP. Поэтому была использована «самодельная» функция. Если в вашем PHP включена поддержка функций работы с календарем, вам нужно удалить определение этой функции из кода в примере.

    Подготовка изображения

    Порядок действий Подготовка к рисованию состоит из вызова нескольких функций GD. Следующий участок кода:

    * Создает изображение нужных размеров.
    * Регистрирует используемые цвета.
    * Очищает изображения, заливая его цветом фона

    Совет Перед началом отрисовки изображения залейте его цветом фона. Это гарантирует, что фон изображения будет того цвета, что вам нужен. Это также полезно для создания прозрачного фона, как будет показано далее.

    Примечание Для простоты изложения, примеры в этой статье не содержат проверок ошибок. «Настоящий» скрипт обязательно должен включать проверки на ошибки

    Рисуем рамку и выводим текст

    Функция ImageString() рисует строку текста на изображении в заданном месте. Нам необходимо вывести пять строк Первые две будут находиться в верхней части рисунка и отображать дату рождения и текущую дату, остальные три под графиком будут показывать, каким цветом какой биоритм изображен. Использование идентификаторов цветов, записанных в переменные, позволяет ссылаться на цвета, не указывая каждый раз RGB значения.

    * Рисуем рамку, внутри которой будет размещен график, и оси
    * Выводим текст примечаний

    Рисунок 1. График биоритмов

    Рисуем кривые

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

    * Функция drawRhythm вызывается три раза с различными параметрами
    * Функция drawRhythm содержит цикл, который вычисляет значение биоритма для каждого дня, и рисует линии.

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

    Вывод изображения клиенту

    Итак, мы нарисовали наш график. Теперь остается отправить это изображение в браузер.

    * Посылаем заголовок, показывающий что мы выводим изображение в формате GIF или PNG.
    * Определяем чересстрочный формат вывода изображения.
    * Делаем цвет фона прозрачным.
    * Используя функцию imageGIF или imagePNG выводим изображение.

    Читать еще:  Is html anchor

    Совет После вызова imageGIF или imagePNG, изменения в изображение вносить уже нельзя, так как оно уже было отправлено клиенту.

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

    Функция ImageColorTransparent() задает цвет прозрачных участков изображения (опять же, если используемый формат позволяет это). В нашем примере мы используем цвет, сохраненный в переменной $colorBackgr, делая участки изображения, нарисованные этим цветом, прозрачными.
    Как использовать полученное изображение

    Итак, мы написали программу, создающую изображение. Как ее использовать? На самом деле все очень просто: Вы можете использовать скрипт в HTML коде как обычный файл изображения. Поскольку скрипт в нашем примере является интерактивным, то для его использования нам нужно ввести http://my.server.net/script.php в адресную строку браузера. Для скрипта, не требующего пользовательского ввода, например получающего информацию из базы данных, просто вставьте в HTML код страницы тэг такого содержания:

    Полный код скрипта

    Заключение

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

    PHPDesigner

    Вы здесь: Главная » PHP » Создание эскизов изображений средствами PHP

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

    Очень часто возникает необходимость создания превью изображений (так называем ThumbImage). В зависимости от специфики проекта, требуется:

    1) осуществлять ресайз изображений “на лету”, непосредственно при загрузке страницы;

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

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

    Итак, обзор скриптов и решений.

    Smart Image Resizer

    Автор: Joe Lencioni

    Текущая версия: v1.3.3 (Released April 28, 2008)

    Оф.сайт: shiftingpixel.com

    Требования:

    Описание:

    Очень простой в использовании скрипт для ресайза изображений “на лету”.

    Работает со следующими графическими форматами: JPEG, GIF, PNG. Достаточно аккуратно обращается с внешним видом картинки – ясность, контраст и т.п. остаются на высоком уровне. Резать старается “по-умному” – предварительно вычислив коэффициент “ширина/высота”. Может заполнять прозрачные области GIF, PNG-изображений заданным цветом. Заботливо складывает отресайзенные изображения в папочку кэша и при наличии кэшированной картинки -выводит именно её, что, конечно же, благоприятно влияет на скорость работы.

    Установка:

    Скачиваем архив: http://shiftingpixel.com/downloads/image-1.3.3.zip.

    Извлекаем файл image.php. В директории со скриптом создаем папку “imagecache”.

    Используя, например, вот такой вызов картинки, наслаждаемся полученным результатом:

    Название паки кэша можно поменять в самом скрипте. Путь к директории с картинками, как мы видим, задается непосредственно в URL (в “image=” прописан путь до картинки, начиная с корня сайта).

    Пример использования в php-скрипте.

    ИМХО: простой в использовании скрипт с минимумом возможностей, которых, впрочем, бывает вполне достаточно.

    phpThumb()

    Автор: James Heinrich

    Текущая версия: 1.7.8 (updated: 28-May-2008 )

    Оффсайт: http://phpthumb.sourceforge.net

    Требования:

    Описание:

    Как и Smart Image Resizer, данный скрипт использует GD для создания превью “на лету”, но в отличие от предыдущего подопытного обладает огромным количеством возможностей и настроек. Фактически, это класс для работы с изображениями на все случаи жизни.

    Поддерживаемые графические форматы входных файлов:

    • JPEG;
    • PNG;
    • GIF;
    • BMP;
    • при наличии ImageMagick – любой формат, который поддерживается данной библиотекой

    Поддерживаемые графические форматы выходных файлов:

    • JPEG;
    • PNG;
    • GIF;
    • BMP (при наличии ImageMagick или phpthumb.bmp.php в наборе скриптов);
    • ICO (при наличии ImageMagick или phpthumb.ico.php в наборе скриптов)

    Подробное описание возможностей скрипта, которых очень много, доступно на офсайте.

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

    Огромное количество примеров (демо):

    Установка: все также распаковываем архив в какую-либо директорию, папка кэша уже есть в архиве, так что отдельно ее создавать не нужно Возможно, потребуется произвести дополнительную настройку скрипта (например, поправить пути и т.п.) – все зависит от конкретной ситуации использования. Для начала, переименуйте файл “phpThumb.config.php.default” в “phpThumb.config.php” и смотрите уже по результатам отработки скрипта – если в процессе выполнения будут возникать неполадки, скрипт сообщит об этом, показав на месте вывода картинки изображение с текстом ошибки.

    Пример использования в php-скрипте.

    Пример очень похож на предыдущий. Разница лишь в формировании URL-а изображения и наборе передаваемых параметров

    ИМХО: мощный инструмент для работы с изображениями. Работает с максимальным соотношением “возможности/качество/скорость”. Большим плюсом является достаточно полная документация и хороший набор демо-данных (как на оффсайте, так и в архиве со скриптом).

    Мы рассмотрели примеры “умных” (в случае phpThumb() – МегаУмных) скриптов, предоставляющих большое число возможностей при работе с изображениями.

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

    Простой скрипт ресайза изображений

    Постановка задачи:

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

    Сами файлы лежат по адресу “/components/com_virtuemart/shop_image/product/”.

    Необходимо: пробежаться по всем записям таблицы и для каждого из существующих изображений создать средний и маленький эскизы.

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

    1. Рисуем форму (мне было удобно сделать это внутри отдельной функции):

    После сабмита основной скрипт shop.browse.php отлавливает параметры формы и передает в нижеописанную функцию значения $small_x и $middle_x

    2. Функция, в которую приходят выловленные параметры:

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

    Читать еще:  Php if два условия

    PHP Image Workshop: простая работа с изображениями как со слоями

    Какие задачи по обработке картинок на php чаще всего стоят перед нами? Как правило, это изменение размера изображений, их кадрирование, наложение водяных знаков и надписей, поворот, изменение формата. В поисках лучшей библиотеки для работы с изображениями на php я перепробовал немало готовых решений, и даже начинал писать своё. Не так давно я наткнулся на библиотеку под названием PHP Image Workshop — PHP класс, использующий библиотеку gd, позволяющий работать с изображениями как со слоями (по аналогии с известными программами Photoshop и GIMP). Звучит неплохо, да? Вот и я решил попробовать.

    Разработчики PHP Image Workshop предлагают использовать принцип построения изображения из слоёв, являющихся php объектами, которые можно делить на группы, перемещать, вращать, накладывать и объединять. Сегодня я расскажу как подключить этот класс в свой скрипт, а так же покажу простой пример построения коллажа с его помощью.

    Подключение РHP Image Workshop

    Скачиваем последнюю версию (на текущий момент это версия 2.0) c сайта разработчика, выгружаем на сервер папку /src/PHPImageWorkshop из архива. Теперь, в зависимости от версии php, типа скрипта, знаний и количества свободного времени, выбираем один из вариантов.

    У меня php 5.3+ и используется автозагрузчик классов

    Великолепно! Разработчики Image Workshop, за что им честь и хвала, использовали технологию пространств имён (namespaces). Осталось только расположить папку PHPImageWorkshop в директорию с библиотеками, с которой работает автолоадер.

    К примеру, чтобы подключить PHP Image Workshop к Yii Framework, нужно загрузить её в директорию расширений (обычно это /protected/extensions) и добавить в action пару строк кода:

    У меня php 5.3+ и я знать не хочу ни про какие автозагрузчики

    Проще было узнать об автозагрузке, но, раз на то пошло, такой вариант тоже предусмотрен. Нужно один за другим, во всех подпапках открыть файлы классов библиотеки и раскомментировать вызов //require_once() в начале каждого файла. Вот пример:

    После этого нужно подключить файл главного класса ImageWorkshop в коде своего скрипта:

    У меня php 5.2 или ниже

    Не завидую 🙁 Можно сплясать и поудалять все вкрапления namespaces из всех классов библиотеки. Инструкции можно найти тут, но проще обновить php.

    Использование PHP Image Workshop

    Есть два варианта использовать класс Image Workshop. Первый — создать псевдоним для имени класса ImageWorkshop и обращаться к этому псевдониму:

    Второй вариант — каждый раз прописывать путь до класса вместе с пространством имён (для меня удобен именно он):

    Инициализация слоя

    Наложение слоёв

    Изменение размера слоя

    Поворот слоя

    Создание и добавление текстового слоя

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

    Отображение сформированного изображения

    Позиционирование

    В некоторых методах PHP Image Workshop позиционирование и точка отсчёта кординат определяется строкой $position, состоящей из двух букв. На схеме ниже показаны все возможные варианты позиционирования. Стрелки указывают направление, в котором будут отсчитываться координаты в случае указания той или иной позиции:

    Пример использования PHP Image Workshop для создания коллажа

    Представим, что нам нужно сделать модный коллаж. У нас есть фон collageBackground.jpg:

    На этот фон нужно наложить, уменьшив размер и повернув, 4 фотографии одежды collageImage1.jpg. collageImage4.jpg:

    Затем, поверх фотографий, нужно наложить такую вот маску collageMask.png, а поверх — написать цену 6 296 руб. Для добавления надписей потребуется файл шрифта. В данном случае — OpenSans-Bold.ttf:

    Вот, собственно, сам код для создания коллажа:

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

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

    Работа с изображениями на PHP

    Уважаемые участники проекта ДвижКод! Сегодня вас ждёт еще одна интересная тема. Все мы привыкли, скажем, загружать новые аватарки в социальных сетях. Но как они масштабируются до нужных размеров? Что происходит на сервере? На эти и многие другие вопросы ответы вас ждут под катом.

    Да, если кто не в курсе, то в интернет-терминологии «кат» (от англ. cut — резать), это место, которое разделяет новость на краткое (в общем списке) и полное представления.

    Многие знают, что я разрабатываю собственную систему управления сайтами под названием Когир (Cogear, http://cogear.ru). История сложная и длинная, но упорно иду к поставленной цели.

    Недавно мне пришлось переписывать ранее написанные классы для работы с изображениями, поэтому я решил с вами поделиться тем, как всё это делается. Милости прошу на кухню.

    Давайте посмотрим базовые аспекты работы с изображениями.

    В PHP есть встроенная библиотека GD. Вот её документация:

    На этой странице вы найдете огромное количество самых разных функций. Но не пугайтесь. Нас интересуют вполне конкретные.

    Как видите, работа с изображениями пока что происходит в виде процедур (функций), поэтому объектно-ориентированную оболочку приходится писать самому.

    Простейший пример работы с изображением:

    Пробуем на локальной машине.

    Создаём файл image.php(у меня для экспериментов локальный домен test.local).

    Кладём в корень папки сайта test.local картинку 1.jpg:

    Вызываем в браузере http://test.local/image.php (в вашем случае — другой адрес).

    Обнаруживаем в папке картинку 2.jpg:

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

    Исправим наш скрипт так, чтобы происходил пересчёт:

    Посмотрим на результат:

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

    Что еще можно делать с изображением? Подрезать его, поворачивать, наслаивать одно на другое, рисовать на нём.

    Уверен, что вам будет интересен мой класс для работы с изображениями. Он вне системы не работает, так как является драйвером для шестерёнки (модуля) «Изображения».

    Но вы найдете в нём для себя много интересного:

    Как он работает в системе? Ради чего столько кода?

    Понимаете? Работает со всеми нужными форматами автоматически. Функционал при необходимости можно расширять.

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

    Поделиться

    Комментарии Правила дискуссии

    1. Участники дискуссии уважительно относятся друг к другу и к автору блога.
    2. Мат недопустим. Учитесь вести диалог культурно.
    3. Реклама и спам запрещены.

    Если вы не соблюдаете эти три простых правила, то ваши комментарии удаляются без предупреждения.

    Во всем остальном вам предоставляется полная свобода слова и выражения собственного мнения.

    Ссылка на основную публикацию
    Adblock
    detector