Т.к. в данный момент я занимаюсь разработкой механизм создания изображений с основной информацией о товаре на них, то данный пост будет сборкой всего, что я нашел полезного по работе с данной библиотекой.
В прошлой статье я уже писал о том, как устанавливать библиотеку Imagick. Сейчас рассмотрим несколько примеров, показывающих, что данная библиотека может сделать с изображением.
Базовый пример использования
try{ $image = new \Imagick(); $file = 'gallery/IMG_0001.JPG'; $image->readImage($file); echo '<img src="./Manipulating-Images-with-PHP-and-GraphicsMagick/' . $file . '" width="200" height="150" /> <br/>'; // get image height and width echo 'Image dimensions: ' . $image->getImageWidth() . ' x ' . $image->getImageHeight() . '<br/>'; // get image format echo 'Image format: ' . $image->getImageFormat() . '<br/>'; // get image depth echo 'Image depth: ' . $image->getImageDepth() . '<br/>'; // get number of unique image colors echo 'Image colors: ' . $image->getImageColors() . '<br/>'; // get image resolution $r = $image->getImageResolution(); echo 'Image resolution: ' . $r['x'] . 'x' . $r['y'] . '<br/>'; // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
Создание превью-изображений
$thumb = new Imagick(); //читаем картинку по полному пути $thumb->readImage($fullpath) //создаем белый фон $canvas = new Imagick(); $canvas->newImage($width, $height, new ImagickPixel("white")); //делаем превью, размер меньше, чем у фона, чтобы было куда впихнуть тень $thumb->thumbnailImage($width-10, $height-10); //наводим резкость, если превью мелкое if ($width < 300) $thumb->sharpenImage(4, 1); //закругляем углы $thumb->roundCorners(5, 5); //делаем копию превьюхи, чтобы сделать тень $shadow = $thumb->clone(); //цвет тени $shadow->setImageBackgroundColor(new ImagickPixel('black')); //собственно, делаем тень $shadow->shadowImage(80, 2.5, 5, 5); //накладываем тень на фон $canvas->compositeImage($shadow, $shadow->getImageCompose(), 0, 0); //накладываем превью на фон $canvas->compositeImage($thumb, $thumb->getImageCompose(), 0, 0); //убираем комменты и т.п. из картинки $canvas->stripImage(); //записываем картинку $canvas->writeImage($writeTo); //подчищаем за собой $canvas->destroy(); $shadow->destroy(); $thumb->destroy();
Наложение водяного знака
$image = new Imagick("path_to_img"); //Watermark текст $text = 'watermark'; //Создаем палитру $draw = new ImagickDraw(); //Устанавливаем свойства Watermark текста $draw->setFont('Arial'); $draw->setFontSize(14); $draw->setFillColor('black'); //Текст позиционируем в правом нижнем углу изображения $draw->setGravity(Imagick::GRAVITY_SOUTHEAST); //Рисуем текст на картинке $image->annotateImage($draw, 10, 12, 0, $text); //Рисуем текст на картинке с небольшим смещением и уже белым цветом $draw->setFillColor('white'); $image->annotateImage($draw, 11, 11, 0, $text); $image->writeImage("path_to_img"); $image->destroy();
Масштабирование
Для примера просто увеличим изображение в 1,5 раза:
try { // initialize object $image = new Gmagick(); // read image file $image->readImage('gallery/original.jpg'); // set height and width as 150% of original $height = $image->getImageHeight() * 1.5; $width = $image->getImageWidth() * 1.5; // resize image $image->resizeImage($width, $height, null, 1); // write new image file $image->writeImage('gallery/new.jpg'); // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
Повернуть изображение
try { // initialize object $image = new Gmagick(); // read image file $image->readImage('gallery/original.jpg'); // rotate image $image->rotateImage('red', -45); // write new image file $image->writeImage('gallery/new.jpg'); // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
Зеркальное отражение
try { // initialize object $image = new Gmagick(); // read image file $image->readImage('gallery/original.jpg'); // flip image vertically $image->flipImage(); // write new image file $image->writeImage('gallery/new_1.jpg'); // revert $image->flipImage(); // flip image horizontally $image->flopImage(); // write new image file $image->writeImage('gallery/new_2.jpg'); // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
Вырезать часть изображения
try { // initialize object $image = new Gmagick(); // read image file $image->readImage('gallery/original.jpg'); // crop image $image->cropImage(122, 70, 76, 138); // write new image file $image->writeImage('gallery/new.jpg'); // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
Увеличение/уменьшение изображения вдвое
try { // initialize object $image = new Gmagick(); // read image file $image->readImage('gallery/original.jpg'); // magnify image 2x $image->magnifyImage(); // write new image file $image->writeImage('gallery/new_1.jpg'); // revert $image->minifyImage(); // scale image to half $image->minifyImage(); // write new image file $image->writeImage('gallery/new_2.jpg'); // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
Преобразование типа изображения
Иногда бывает так, что изображение загружено в неугодном формате и нужно формат сменить. Для этого существует специальная функция
try { // initialize object $image = new Gmagick(); // read image file $image->readImage('gallery/original.jpg'); // switch to GIF format $image->setImageFormat('GIF'); // write new image file $image->writeImage('gallery/new.gif'); // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
Добавить рамку к изображению
try { // initialize object $image = new Gmagick(); // read image file $image->readImage('gallery/original.jpg'); // add border to image $image->borderImage('blue', 4, 15); // write new image file $image->writeImage('gallery/new.jpg'); // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
3D-рамка
try { // initialize object $image = new Gmagick(); // read image file $image->readImage('gallery/original.jpg'); // add 3D border to image $image->frameImage('silver', 20, 20, 5, 5); // write new image file $image->writeImage('gallery/new.jpg'); // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
Размыть изображение
Для размытия используется метод blurImage, а для добавления резкости - метод sharpenImage
try { // initialize object $image = new Gmagick(); // read image file $image->readImage('gallery/original.jpg'); // blur image $image->blurImage(8, 3); // write new image file $image->writeImage('gallery/new.jpg'); // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
Стилизировать углем изображение
try { // initialize object $image = new Gmagick(); // read image file $image->readImage('gallery/original.jpg'); // add charcoal drawing effect $image->charcoalImage(5, 0.2); // write new image file $image->writeImage('gallery/new.jpg'); // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
Эффект живописи маслом на изображении
try { // initialize object $image = new Gmagick(); // read image file $image->readImage('gallery/original.jpg'); // add oil paint effect $image->oilPaintImage(2.5); // write new image file $image->writeImage('gallery/new.jpg'); // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
Эффект темной комнаты на изображении
try { // initialize object $image = new Gmagick(); // read image file $image->readImage('gallery/original.jpg'); // solarize image $image->solarizeImage(100); // write new image file $image->writeImage('gallery/new.jpg'); // free resource handle $image->destroy(); } catch (Exception $e) { die ($e->getMessage()); }
Наложение одного изображения на другое
$image1 = new \Imagick('image1.jpg'); $image2 = new \Imagick('image2.png'); $offsetX = 100; // смещение по оси X $offsetY = 10; // смещение по оси Y $image1->compositeImage($image2, Imagick::COMPOSITE_OVER, $offsetX, $offsetY); $image1->writeImages('image3.jpg');
Создание линейного градиента
$gradient = new Imagick(); $width = 400; // ширина прямоугольника $height = 300; // высота прямоугольника $pseudoString = 'gradient:red-rgba(64,255,255,0.5)'; // в значении этого параметра не должно содержаться пробелов // $pseudoString = 'gradient:red-transparent'; // $pseudoString = 'gradient:rgb(74,30,100)-rgba(64,255,255,0.5)'; $gradient->newPseudoImage($width, $height, $pseudoString); $gradient->setImageFormat('png');
Наложение текста
// Создаём новое изображение с прозрачным фоном $image = new Imagick(); $image->newImage(800, 75, new ImagickPixel('transparent')); $draw = new ImagickDraw(); $draw->setFillColor('#000'); // цвет текста $draw->setFont('path/to/font/Atial.ttf'); // путь до файла со шрифтом $draw->setFontSize(30); // размер шрифта $image->annotateImage($draw, 0, 0, 0, 'Текст Текст'); $image->setImageFormat('png');
Адаптивное изменение размера изображения
В отличие от thumbnailImage() - изображение получается очень резким и занимает значительно больше места на диске. Особенно резкость заметна если изображение преобразовывается из большого в маленькое. Если в качестве третьего параметра указать TRUE (разумеется, при указанных первых двух), то пропорции изображения будут сохранены. Если указаны не пропорциональные размеры, то в этом случае одна из сторон будет уменьшена для сохранения пропорции.
$image = new Imagick('orig.JPG'); $image->adaptiveResizeImage(800, 0); $image->writeImage('800x0_adaptiveResizeImage.jpg');
Обрезка из центра изображения
Создает изображения указанных размеров от центра. (увеличивая или уменьшая изображене).
$image = new Imagick('orig.JPG'); $image->cropThumbnailImage(250, 250); $image->writeImage('250x250_cropThumbnailImage.jpg');
Больше примеров можно найти тут.
Разработка сайта
Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...
Сопровождение сайта
Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Работы по сайту
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.