Библиотека обработки изображений 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)
    Добавить жёсткости
  • ...
Так же очень рекомендую заглянуть в полную документацию по проекту WideImage, а особенно в раздел об умных координатах

Примеры

  • Обрезка

    Обрезать изображение можно указав координаты: 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');