Обработка картинок с помощью библиотеки WideImage

Обработка изображений в PHP встречается чуть ли не в каждом проекте. CMS облегчили это дело для программистов и админов веб-сайтов, что и привело к такому спросу на использование картинок на сайте. Аватары, тумбнэйлы, всякие галереи и т.п. – есть почти на любом сайте.

Но что если вы не используете в очередной раз какую-то CMS и вам надо самому сделать систему обработки картинок? А вот здесь вам и поможет библиотека WideImage.

Что такое WideImage?

WideImage это библиотека управления изображениями с открытым исходным кодом, которая предоставляет легкое использование GD. Также включает функциональность для стандартных задач редактирования и рисования. Вместо того, чтобы переписывать один и тот же код для создания тумбов, обрезки, ресайза и т.п. – WideImage предоставляет single line (т.е. одной строкой или даже одной функцией) метод для решения таких задач.

Требования

  • PHP 5.2 or 5.3
  • GD2 extension

Как начать работать

Чтобы использовать библиотеку надо просто её подключить:
[php]include ‘WideImage/WideImage.php’;[/php]

Потом загрузите картинку:

[php]$image = WideImage::load(“path-to/image.jpg”);[/php]

Далее вы можете обрабатывать её разными способами. Например, изменение размера:

[php]$resized = $image->resize(400, 300);[/php]

Потом сохраняем:

[php]$resized->saveToFile(“small.jpg”);[/php]

Можно также это все выполнить одной строкой кода:

[php]WideImage::load(“path-to/image.jpg”)->resize(400, 300)->saveToFile(“small.jpg”);[/php]

Поддерживаемые форматы

Загрузка:

WideImage поддерживает все форматы, которые поддерживает GD (на данный момент это: GIF, PNG, JPG, GD, GD2, WBMP, XBM, XPM). Также BMP (чтение/запись) и TGA (чтение только).

Сохранение:

Поддерживаются форматы для сохранения: GIF, PNG, JPEG, BMP, GD и GD2.

Конвертация

WideImage поддерживает конвертацию из одного формата в другой:

[php]WideImage::load(‘file.jpg’)->saveToFile(‘converted.png’);[/php]

Примеры

Обрезка

Обрезать изображение можно указав координаты: left, top, ширина, высота в crop() методе. Также можно использовать разные формы обрезки, указывая большее кол-во координат.

Кроп 100х75 от верхнего левого угла:

[php]$cropped = $image->crop(0, 0, 100, 75);[/php]

Другие варианты:
[php]$cropped = $image->crop(‘50%-100’, ‘50%-125’, 200, 250);
$cropped = $image->crop(‘center’, ‘center’, 200, 250);
$cropped = $image->crop(‘100%-110’, ‘100%-30’, 100, 20);
$cropped = $image->crop(‘right–10’, ‘bottom–10’, 100, 20);[/php]

Водяные знаки

Нанесение водяного знака делается с помощью merge() метода. Вам нужно указать координаты другого изображения и прозрачность. Если координаты не заданы, то по умолчанию (0,0), и если прозрачность не задана, то по умолчанию 100.

[php]$img = WideImage::load(‘pic.jpg’);
$watermark = WideImage::load(‘logo.jpg’);
$new = $img->merge($watermark, 10, 10, 30);[/php]
или

[php]$new = $img->merge($watermark, ‘50% – 25’, ‘100% – 40’, 50);
$new = $img->merge($watermark, ‘center’, ‘bottom – 10’, 50);[/php]

Вывод на экран

Вывод в JPG формате с качеством 90%.

[php]$image->output(‘jpg’, 90);[/php]

Текст с тенью

Пример того, как можно написать текст с тенью на картинке:

[php]$image = WideImage::load(‘image.jpg’);
$canvas = $image->getCanvas();
$canvas->useFont(‘path/to/arial.ttf’, 16, $image->allocateColor(0, 0, 0));
$canvas->writeText(‘right’, ‘bottom’, ‘Hello, world!’);
$canvas->useFont(‘arial.ttf’, 16, $image->allocateColor(255, 255, 255));
$canvas->writeText(‘right – 1’, ‘bottom – 1’, ‘Hello, world!’);
$image->saveToFile(‘image-with-text.jpg’);[/php]

Разные способы загрузки изображения

$image = WideImage::load(…);

Из файла:

[php]$img = WideImage::load(‘path/to/image.jpg’);
// или

$img = WideImage::loadFromFile(‘path/to/image.jpg’);[/php]
Из загруженного файла:

Можно обрабатывать картинки сразу из $_FILES:

[html]<input type=”file” name=”myimg” />[/html]
[php]$img = WideImage::load(‘myimg’);
// или
$img = WideImage::loadFromUpload(‘myimg’);[/php]
Массив файлов:

[html]<input type=”file” name=”img[]” />
<input type=”file” name=”img[]” />
<input type=”file” name=”img[]” />[/html]
[php]$img = WideImage::load(‘img’);
// вернет массив
$img = WideImage::loadFromUpload(‘img’, 2);
// вернет одну картинку из массива изображений с индексом 2[/php]
Из URL:

Если у вас включен allow_url_fopen в php.ini:

[php]$img = WideImage::load(‘http://example.com/image.gif’);[/php]
Работает с любыми поддерживаемыми протоколами: http, https, ftp, ftps, …

Более подробная документация здесь.

Похожие проекты

Если вы ищите альтернативу WideImage, то вот небольшой список других библиотек/расширений с открытым исходным кодом:

Subscribe
Notify of
2 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
2
0
Would love your thoughts, please comment.x
()
x