Обработка картинок с помощью библиотеки WideImage
Contents
Обработка изображений в 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, то вот небольшой список других библиотек/расширений с открытым исходным кодом:
- Imagine (PHP 5.3+, GD, Imagick, GMagick)
- Asido (поддерживает GD и ImageMagick)
- phpThumb (GD, ImageMagick)
- PHP Thumbnailer (GD, ImageMagick; PHP5; активно разрабатывается)
- PHP IML (GD)
- class.upload.php (GD)
- Smart Image Resizer (GD)
- php-image (GD)
- Gregphoto image (GD)
- Image_Transform (GD, ImageMagick, NetPBM)
- phMagick (ImageMagick)
- GD (GD)
- IMagick (ImageMagick)
- MagickWand for PHP (ImageMagick MagicWand)