Этот класс является альтернативой пакету Intervention Image для более гибкой работы с текстом на изображении. Используйте его, если вам нужно уместить текст в заданной области, автоматически рассчитать размер шрифта и изменить высоту строки . Метод рисования текста также умеет возвращать реальный размер надписей, что позволит, например, располагать блоки друг под другом.
Помимо гибкой работы с текстом, класс предоставляет Image API, аналогичный пакету Intervention. В том числе интеллектуальное изменение размера плаката, фильтры, рисование фигур и наложение других изображений.
Если вы не используете композитор в своей работе, вас также может заинтересовать простота класса и отсутствие каких-либо зависимостей. Обратите внимание, что этот класс поддерживает только драйвер PHP-GD. Вы также можете легко наследовать свой класс — все методы родителя можно переопределить.
Лучший способ быстро и легко установить poster editor — с помощью Composer.
Однако вы можете запросить класс напрямую, не используя загрузчик — это никак не повлияет на производительность.
php composer.phar require antonlukin/poster-editor
В случае ошибки методы класса возвращают исключение.
Поэтому лучше всего вызывать их внутри блока try..catch .
// Using composer
require_once __DIR__ . ' /vendor/autoload.php ' ;
// Or directly
// require_once __DIR__ . '/PosterEditor.php';
try {
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 600 , 600 );
$ image -> show ();
} catch ( Exception $ e ) {
echo $ e -> getMessage ();
} $image->get()
Получите ресурс изображения для использования необработанных команд gd.
$image->set(instance $resourse)
Установите ресурс изображения после использования необработанных команд gd.
$image->make(mixed $data)
Создайте новый экземпляр изображения из файла или двоичных данных.
$image->insert(mixed $data, array $options = array())
Вставьте заданный источник изображения поверх текущего изображения с необязательной позицией. Первым параметром могут быть двоичные данные, путь к файлу или другой экземпляр класса. Параметры — это массив координат относительного смещения x/y от верхнего левого угла и непрозрачности от 0 до 100, где 0 — отсутствие прозрачности. По умолчанию изображение будет центрировано.
$image->canvas(int $width, int $height, array $options = array())
Инициализируйте холст по ширине и высоте. Параметры цвета фона находятся в массиве настроек цвета/непрозрачности. По умолчанию черный холст без непрозрачности.
$image->show(string $format = null, int $quality = 90)
Отправляет HTTP-ответ с текущим изображением в заданном формате и качестве. Формат — это расширение изображения файла. По умолчанию данные ответа будут закодированы в типе текущего изображения. Если тип изображения еще не определен, метод вернет данные в формате JPEG. Качество нормализуется для всех типов файлов в диапазоне от 0 (низкое качество, маленький файл) до 100 (наилучшее качество, большой файл). Значение по умолчанию — 90. Формат PNG не имеет потерь, а качество влияет только на размер изображения и скорость сжатия.
$image->save(string $path, int $quality = 90, string $format = null)
Сохраните текущее состояние объекта изображения в файловой системе. При необходимости укажите определенный путь, по которому должно быть сохранено изображение. Тип изображения будет определяться расширением файла. Если доступного расширения нет, данные ответа будут закодированы в типе текущего изображения. Если тип изображения еще не определен, метод вернет данные в формате JPEG. При желании вы можете переопределить это с помощью параметра формата. Качество нормализуется для всех типов файлов в диапазоне от 0 (низкое качество, маленький файл) до 100 (наилучшее качество, большой файл). Значение по умолчанию — 90. Формат PNG не имеет потерь, а качество влияет только на размер изображения и скорость сжатия.
$image->destroy()
Освобождает память, связанную с текущим экземпляром изображения, до завершения PHP-скрипта. Обычно ресурсы уничтожаются автоматически после завершения сценария.
$image->width()
Возвращает высоту текущего изображения в пикселях.
$image->height()
Возвращает высоту текущего изображения в пикселях.
$image->resize(int $width, int $height)
Изменяет размер текущего изображения в зависимости от заданной ширины и высоты. Не обращает внимания на соотношение сторон. Чтобы пропорционально изменить размер, используйте методы upsize и downsize .
$image->upsize(int $width = null, int $height = null)
Увеличьте изображение по большей стороне. Рассчитывается по соотношению для нулевой ширины или высоты.
$image->downsize(int $width = null, int $height = null)
Уменьшите изображение по большей стороне. Рассчитывается по соотношению для нулевой ширины или высоты.
$image->crop(int $width, int $height, array $options = array())
Вырезать прямоугольную часть текущего изображения заданной ширины и высоты. Определите дополнительные координаты x,y, чтобы переместить верхний левый угол выреза в определенное положение.
$image->fit(int $width, int $height, string $position = 'center')
Комбинируйте обрезку и изменение размера для разумного форматирования изображения. Этот метод автоматически найдет наиболее подходящее соотношение сторон текущего изображения, обрежет его и изменит размер до заданного размера. По умолчанию возможные позиции: top-left , top , top-right , bottom-left , bottom , bottom-right , right , left и center .
$image->line(int $x1, int $y1, int $x2, int $y2, array $options = array())
Нарисуйте линию от точки x,y 1 до точки x,y 2 на текущем изображении. Используйте параметр options, чтобы установить значения цвета, непрозрачности и ширины.
$image->rectangle(int $x, int $y, int $width, int $height, array $options = array())
Нарисуйте цветной прямоугольник на текущем изображении. Используйте параметр options, чтобы установить значения цвета, непрозрачности, толщины и контура.
$image->ellipse(int $x, int $y, int $width, int $height, array $options = array())
Нарисуйте эллипс. Используйте параметр options, чтобы установить значения цвета, непрозрачности и контура.
$image->brightness(int $level = 0)
Измените яркость текущего изображения на заданный уровень. Используйте значения от -100 для минимальной яркости 0 (без изменений) и +100 для максимальной.
$image->contrast(int $level = 0)
Изменить контрастность текущего изображения на заданный уровень. Используйте значения от -100 для минимального контраста, 0 для отсутствия изменений и +100 для максимального.
$image->grayscale()
Превратите изображение в версию в оттенках серого.
$image->blur()
Примените эффект размытия изображения.
$image->invert()
Инвертировать цвета изображения.
$image->blackout()
Нарисуйте на изображении черный прямоугольник непрозрачности.
$image->rotate(int $angle, array $options = array())
Поворот изображения. Установите угол в градусах и дополнительный цвет непокрытой зоны после поворота.
$image->text(string $text, array $options = array(), array &$boundary = array())
Нарисуйте текст на изображении. Возможные варианты:
Используйте границу, чтобы получить фактические размеры нарисованного текстового поля. Подробные примеры смотрите ниже.
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1200 , 630 , ' bottom ' )-> blackout ( 50 );
$ logo = new PosterEditor PosterEditor ();
$ logo -> make ( ' images/logo.png ' )-> downsize ( 150 , null );
$ image -> insert ( $ logo , array ( ' x ' => 50 , ' y ' => 50 ))-> show ();
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1200 , 630 );
$ image -> grayscale ()-> brightness (- 40 );
$ image -> text (
' Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat Lorem ipsum dolor sit amet ' , // phpcs:ignore
array (
' x ' => 100 ,
' y ' => 100 ,
' width ' => 1000 ,
' height ' => 400 ,
' horizontal ' => ' center ' ,
' vertical ' => ' center ' ,
' fontpath ' => ' fonts/opensans.ttf ' ,
' fontsize ' => 24 ,
' lineheight ' => 1.75 ,
' color ' => ' #ffffff ' ,
' opacity ' => 0 ,
' debug ' => true ,
)
);
$ image -> show ( ' jpg ' , 70 );
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 900 , 600 );
$ image -> blackout ( 70 );
$ image -> text (
' Lorem ipsum dolor d d 4 g sit amet, consectetur adipiscing et, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex eas commodo consequat sdfsdfl ' , // phpcs:ignore
array (
' x ' => 100 ,
' y ' => 100 ,
' width ' => 600 ,
' height ' => 400 ,
' horizontal ' => ' justify ' ,
' vertical ' => ' justify ' ,
' fontpath ' => ' fonts/opensans.ttf ' ,
' fontsize ' => 20 ,
' lineheight ' => 1.5 ,
' color ' => ' #ffffff ' ,
' opacity ' => 0 ,
' debug ' => true ,
)
);
$ image -> show ( ' png ' );
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> crop (
900 , 600 ,
array (
' x ' => ' 0 ' ,
' y ' => ' 100 '
)
);
$ image -> grayscale ()-> brightness (- 40 );
$ image -> text (
' Large title with unknown height. Can be multi-line ' ,
array (
' x ' => 50 ,
' y ' => 100 ,
' width ' => 800 ,
' fontpath ' => ' /fonts/merriweather.ttf ' ,
' fontsize ' => 48 ,
' lineheight ' => 1.5 ,
' color ' => ' #9999ff ' ,
),
$ boundary
);
$ image -> text (
' This text appears right after title using smart boundaries ' ,
array (
' x ' => 50 ,
' y ' => $ boundary [ ' y ' ] + $ boundary [ ' height ' ],
' width ' => 800 ,
' fontpath ' => ' /fonts/opensans.ttf ' ,
' fontsize ' => 20 ,
' lineheight ' => 1.5 ,
' color ' => ' #ff9999 ' ,
),
$ boundary
);
$ image -> show ();
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1000 , 630 , ' bottom ' );
$ image -> contrast ( 5 )-> brightness (- 30 )-> blur ();
$ image -> rectangle (
20 , 20 , 960 , 590 ,
array (
' color ' => ' #ffffff ' ,
' outline ' => true ,
' width ' => 4 ,
)
);
$ image -> ellipse (
200 , 200 , 200 , 200 ,
array (
' color ' => ' #00ff00 ' ,
' opacity ' => 50 ,
)
);
$ image -> ellipse (
800 , 200 , 200 , 200 ,
array (
' color ' => ' #ff0000 ' ,
' opacity ' => 50 ,
)
);
$ image -> rectangle (
480 , 280 , 80 , 140 ,
array (
' color ' => ' #0000ff ' ,
)
);
$ image -> line (
200 , 500 , 800 , 500 ,
array (
' color ' => array ( 255 , 255 , 0 ),
' opacity ' => 10 ,
' width ' => 4 ,
)
);
$ image -> show ( ' png ' );
Весь код проекта хранится на Github. Лучший способ помочь проекту — сообщить об ошибке или добавить новый функционал. Вы также можете открыть здесь задачу или отправить запрос на включение.