Библиотека обработки изображений WideImage
Зависимости
- Нет зависимостей
WideImage - это библиотека работы с изображениями. Поддерживает весьма удобный синтаксис цепных функций, а так же умные координаты.
Загрузка изображений
-
Загрузка через путь к файлу
$img = WideImage::loadFromFile('path/to/image.jpg'); // Или $img = WideImage::load('path/to/image.jpg')
-
Загрузка по имени input=file элемента формы
Есть форма:<input type="file" name="myimg" />
Тогда загрузку производим вот так:$img = WideImage::loadFromUpload('myimg'); // Или так $img = WideImage::load('myimg');
Так можно вызвать напрямую загрузку из временного файла:$img = WideImage::loadFromFile($_FILES['myimg']['tmp_name'])
На самом деле loadFromUpload лишь надстройка от loadFromFile
-
Загрузка массива изображений
<input type="file" name="img[]" /> <input type="file" name="img[]" /> <input type="file" name="img[]" />
Загрузка вернёт массив объектов WideImage (массив картинок)$img = WideImage::load('img')
Если Вы хотите загрузить конкретную картинку, то сделать это можно так:$img = WideImage::loadFromUpload('img', 2)
-
Загрузка через URL
$img = WideImage::load('http://example.com/image.gif'); // Или $img = WideImage::loadFromFile('http://example.com/image.gif');
-
Загрузка из бинарной строки данных (байт-строки)
$img = WideImage::load($data); // Или $img = WideImage::loadFromString($data);
-
Загрузка по image-resource
$image_handle = imagecreatefromjpeg('path/to/a/pic.jpg'); $img = WideImage::load($image_handle); // Или $img = WideImage::loadFromHandle($image_handle);
Сохранение изображений
-
Сохранение в файл
$img->saveToFile('/path/to/image.png'); $img->saveToFile('image.jpg', 40); // Сохраням JPG с качеством 40 $img->saveToFile('image.png', 6); // Сохраняем PNG с уровнем сжатия 6
-
Вывод в поток вывода (например в браузер)
$img->output('gif'); $img->output('jpg', 45); // Вывод с качеством 45
-
Вывод в битовую строку
$data = $img->asString('gif'); $data = $img->asString('jpg', 80);
Манипуляции с изображениями
Подбробнее о возможных действиях с изображениями можно почитать на сайте библиотеки:
Манипуляции с изображениями.
Однако, я расскажу о самых часто используемых методах:
-
resize([mixed $width = null], [mixed $height = null], [string $fit = 'inside'], [string $scale = 'any'])
Изменение размеров изображения
$width - умная ширина, поддерживает форматы: 100, 50%, 50% + 15, 10% + 20 (если NULL то считается от $height)
$height - умная высота
$fit - [inside, fill, outside]
$scale - [any, up, down] - можно например запретить растягивать если нужно, для этого нужно выставить down, тогда скейлится будут только те которые делали бы это в сторону уменьшения размеров
Примеры:$smaller = $image->resize('50%'); $smaller = $image->resize('100', '100', 'inside', 'down'); $smaller = $image->resizeDown(100, 100, 'inside');
-
resizeCanvas( mixed $width, mixed $height, mixed $pos_x, mixed $pos_y, [int $bg_color = null], [string $scale = 'any'], [bool $merge = false])
Масштабирует в квадратное полотно с возможностью умного смещения позиций. -
crop( [mixed $left = 0], [mixed $top = 0], [mixed $width = '100%'], [mixed $height = '100%'])
Обрезка изображения -
autoCrop( [int $margin = 0], [int $rgb_threshold = 0], [int $pixel_cutoff = 1], [int $base_color = null])
Автоматическая обрезка изображения -
roundCorners( int $radius, [int $color = null], [int $smoothness = 2], [int $corners = 255])
Скругление уголков -
rotate( int $angle, [int $bgColor = null], [bool $ignoreTransparent = true])
Поворот -
rotate( int $angle, [int $bgColor = null], [bool $ignoreTransparent = true])
Поворот -
mirror()
Зеркальное отображение изображения -
flip()
Перевёрнутое -
unsharp( float $amount, float $radius, float $threshold)
Добавить жёсткости - ...
Примеры
-
Обрезка
Обрезать изображение можно указав координаты: left, top, ширина, высота в crop() методе.
// Обрезка 100х75 от верхнего левого угла: $cropped = $image->crop(0, 0, 100, 75); // Ещё варианты $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);
-
Водяные знаки
Нужно указать координаты другого изображения и прозрачность.
$img = WideImage::load('pic.jpg'); $watermark = WideImage::load('logo.jpg'); $new = $img->merge($watermark, 10, 10, 30); // Ещё варианты $new = $img->merge($watermark, '50% – 25', '100% – 40', 50); $new = $img->merge($watermark, 'center', 'bottom – 10', 50)
-
Вывод на экран
Вывод в JPG формате с качеством 90%.
$image->output('jpg', 90);
-
Текст с тенью
$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');