Рекомендовать PHP-плагин для обработки изображений Intervention Image

задняя часть PHP API Laravel

Будь то веб-интерфейс или разработка приложений, обработка изображений неизбежно связана с обработкой изображений.

А вот для фона или интерфейса приложения ведь основная работа это обработка данных, а обработки изображений стало меньше, зато сейчас все больше и больше функций обработки изображений в фоне.Например в официальном аккаунте для достижения специальная функция создания плакатов. В настоящее время необходимо вставлять аватары и псевдонимы пользователей-фанатов в фиксированные изображения, превращать их в плакаты, делиться ими в кругу друзей и играть рекламную роль.

Итак, сегодня я рекомендую PHP-инженерам плагин для обработки изображений Intervention Image.

Intervention Image

Intervention/image — это инструмент обработки изображений, настроенный для Laravel, который предоставляет выразительный способ создания и редактирования изображений.

Intervention Image is an open source PHP image handling and manipulation library. It provides an easier and expressive way to create, edit, and compose images and supports currently the two most common image processing libraries GD Library and Imagick.

The class is written to make PHP image manipulating easier and more expressive. No matter if you want to create image thumbnails, watermarks or format large image files Intervention Image helps you to manage every task in an easy way with as little lines of code as possible.

The library follows the FIG standard PSR-2 to ensure a high level of interoperability between shared PHP code and is fully unit-tested.

Взято с официального сайтаimage.intervention.io/

Установить изображение вмешательства

В этой статье рассказывается об основном использовании Intervention Image в сочетании с проектом Laravel, поэтому для установки Intervention Image лучше использовать composer, а официальный сайт Intervention Image также рекомендует использовать composer для установки.

composer require intervention/image

// 或者

php composer.phar require intervention/image

Как установить Composer, смотрите мою предыдущую статью

Потяните Ravel-China.org/docs/5.5/in…

Конфигурация Laravel

в файле конфигурации config/app.php$providersДобавьте провайдера в массив:

Intervention\Image\ImageServiceProvider::class

существует$aliasesДобавьте соответствующий псевдоним в массив:

'Image' => Intervention\Image\Facades\Image::class

Если вам нужно настроить драйвер образа, вам нужно настроить толькоconfig/image.phpПосле модификации файл конфигурации нужно только сгенерировать, выполнив соответствующую команду:

php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"

Файл конфигурации выглядит следующим образом:

<?php

return array(

    /*
    |--------------------------------------------------------------------------
    | Image Driver
    |--------------------------------------------------------------------------
    |
    | Intervention Image supports "GD Library" and "Imagick" to process images
    | internally. You may choose one of them according to your PHP
    | configuration. By default PHP's "GD Library" implementation is used.
    |
    | Supported: "gd", "imagick"
    |
    */

    'driver' => 'gd'

);

Если вам нужно перейти на драйвер Imagick, просто поставьтеdriverПросто измените значение.

Начните свое путешествие по обработке изображений

Route::get('/yemeishu/{value}', function ($value) {

    $img = Image::make(base_path().'/***/background0.jpeg');

    return $img->response('jpeg');
});

Таким образом, это изображение может быть выведено напрямую.Конечно, мы можем добавить к этому изображению абзац: «Мне нравится Laravel», а затем вывести: размер 600 * 800.

Route::get('/yemeishu/{value}', function ($value) {

    $img = Image::make(base_path().'/***/background0.jpeg')->resize(600, 800);

    $img->text('「我喜欢 Laravel」', 120, 220, function ($font) {

        $font->file(base_path().'/***/font1.ttf');

        $font->size(32);

        $font->valign('bottom');

        $font->color('#333333');
    });

    return $img->response('jpeg');
});

Затем мы помещаем на него «изображение QR-кода». Этот QR-код является URL-ссылкой:

Route::get('/yemeishu/{value}', function ($value) {
    $img = Image::make(base_path().'/public/***/background0.jpeg')->resize(600, 800);

    $img->text('「我喜欢 Laravel」', 120, 220, function ($font) {
        $font->file(base_path().'/***/font1.ttf');
        $font->size(32);
        $font->valign('bottom');
        $font->color('#333333');
    });

    // 获取远程图片

    $erweimaimage = Image::make('http://ow20g4tgj.bkt.clouddn.com/2017-11-11-15103969491817.jpg')->resize(200, 200);

    // 插入到底部,下边距 50 处
    $img->insert($erweimaimage, 'bottom', 0, 50);

    return $img->response('jpeg');
});

Такое ощущение, что это "плакат".

Далее давайте займемся чем-то немного «материальным». В актуальном поколении, после того как наши плакаты в основном разрабатываются дизайнерами, разработчики вырезают картинки, а затем внедряют их в определенные функции.

Перейдите непосредственно к коду:

public function getBookImageMaker($book, $share, $xcxurl) {
        $background = [
            base_path().'/public/***/background0.jpeg',
            base_path().'/public/***/background1.jpeg',
            base_path().'/public/***/background2.jpeg'
        ];

        $font_paths =  [base_path().'/***/font0.ttf',
            base_path().'/***/font1.ttf'];

        $font_path = $font_paths[rand(0, 1)];
        $img = Image::make($background[rand(0,2)])->resize(640, 1000);

        $face_img = Image::make($share['face_img'])
            ->resize(60, 60);
        // 头部加头像
        $img->insert(
            $face_img,
            'top-left',
            55,
            76
        );

        // 头部加昵称
        $img->text($share['nickname'].'为你推荐', 131, 120, function ($font) use ($font_path) {
            $font->file($font_path);
            $font->size(32);
            $font->valign('bottom');
            $font->color('#333333');
        });

        // 图书图片区域
        $bodyimage = Image::canvas(533, 475, '#fe7e86');

        $goodsimage = Image::make($book['goods_img'])
            ->resize(531, 309);

        $bodyimage->insert($goodsimage, 'top-left', 1, 1);

        $bodybuttomimage = Image::canvas(531, 164, '#fff');

        $strings =  $this->mbStrSplit($book['name'], 18);

        $i = 0; //top position of string
        if (count($strings) == 1) {
            $bodybuttomimage->text($strings[0], 17, 44, function ($font) use ($font_path) {
                $font->file($font_path);
                $font->size(30);
                $font->valign('top');
                $font->color('#333333');
            });
        } else {
            foreach($strings as $key => $string) {
                if ($key == 2) {
                    break;
                }
                // 标题部分
                $bodybuttomimage->text($string, 17, 16 + $i, function ($font) use ($font_path) {
                    $font->file($font_path);
                    $font->size(27);
                    $font->valign('top');
                    $font->color('#333333');
                });
                $i = $i + 43; //shift top postition down 42
            }
        }

        // 价格
        if ($book['orig_price']) {
            $price = $book['orig_price'];
        } else {
            $price = $book['price'];
        }
        $bodybuttomimage->text('原价:'.$price, 17, 118, function ($font) use ($font_path) {
            $font->file($font_path);
            $font->size(24);
            $font->valign('top');
            $font->color('#a3a3a3');
        });

        if ($book['group'] && $book['group']['endtime'] > date("Y-m-d H:i:s")) {
            $xianjiaString = '团购价:';
            $xianPrice = $book['group']['price'];

            $tuanButton = Image::canvas(107, 33, '#ff0000');

            $tuanButton->text($book['group']['min_quantity'].'人团', 22, 6, function ($font) use ($font_path) {
                $font->file($font_path);
                $font->size(25);
                $font->align('left');
                $font->valign('top');
                $font->color('#fff');
            });

            $bodybuttomimage->insert($tuanButton, 'top-right', 30, 110);
        } else {
            $xianjiaString = '现价:';
            $xianPrice = $book['price'];
        }

        $bodybuttomimage->text($xianjiaString, 180, 118, function ($font) use ($font_path) {
            $font->file($font_path);
            $font->size(24);
            $font->valign('top');
            $font->color('#333333');
        });

        $bodybuttomimage->text('¥'.$xianPrice, 270, 118, function ($font) use ($font_path) {
            $font->file($font_path);
            $font->size(27);
            $font->valign('top');
            $font->color('#fe0000');
        });
        $bodyimage->insert($bodybuttomimage, 'top-left', 1, 310);
        $img->insert($bodyimage, 'top-left', 55, 154);

        // 底部二维码部分
        $dibuimage = Image::canvas(596,308);

        $codeimage = Image::make(base_path().'/public/img/maker/1/codeborder.jpeg')->resize(255, 255);
        $codesourceimage = Image::make($xcxurl)
            ->resize(249, 249);
        $codeimage->insert($codesourceimage, 'top-left', 3, 3);

        $dibuimage->insert($codeimage, 'top-left', 33, 23);

        $dibuimage->text('长按识别小程序码', 300, 110, function ($font) use ($font_path) {
            $font->file($font_path);
            $font->size(27);
            $font->valign('top');
            $font->color('#333333');
        });

        $dibuimage->text('立即抢购!', 370, 150, function ($font) use ($font_path) {
            $font->file($font_path);
            $font->size(27);
            $font->valign('top');
            $font->color('#333333');
        });

        $img->insert($dibuimage, 'top-left', 22, 650);

        return $img;
    }

Конечный продукт выглядит следующим образом:

Что касается функции приведенного выше кода, обратитесь к описанию API официального сайта:

image.intervention.io/

Суммировать

Теперь все виды электронной коммерции, платформы приложений контента и различные общедоступные учетные записи будут использовать «плакаты».Как сделать встроенные плакаты с различными персонализированными метками в фоновом интерфейсе, должно быть жесткой необходимостью. Поэтому в этой статье рекомендуется использовать плагин Intervention Image.

Рекомендуемое чтение

  1. Рекомендовать плагин сетевых запросов PHP GuzzleTickets.WeChat.QQ.com/Yes/Мой 2i8 эм ху…

  2. Порекомендуйте плагин управления фоном администратора LaravelTickets.WeChat.QQ.com/Yes/PN AJ0 — это 2X3…

"Заканчивать"


coding01 с нетерпением ждет вашего дальнейшего внимания

qrcode
qrcode


Спасибо, что тоже это увидели

qrcode
qrcode