美文网首页
Laravel 图片合成 图片生成

Laravel 图片合成 图片生成

作者: 大萝卜2022 | 来源:发表于2023-02-22 17:30 被阅读0次

使用 [intervention/image] 包进行开发
安装composer require intervention/image

创建画布

# $width 画布高度
# $height 画布宽度
# $color 16进制颜色 如:#FFFFFF
$image = Image::canvas($width,$height,$color);

插入图片

       # insert(resource,position,x,y) 在画布指定位置插入图片
       # resource 图片资源|图片路径
       # 以什么为原点 top-left:以左上角 bottom-left:已左下角 top-right:以右上角 bottom-right:以右下角
       # x x轴距原点位置
       # y y轴距原点位置
       $image = Image::canvas($width,$height,$color);
       $image->insert(public_path('image/avatar.png'), 'top-left', 200, 300);

更改图片大小

       # 1.通过make($resource) 创建image实例
       # $resource 图片路径 string|图片资源bytes
       # 2.通过resize($width,$height) 重新设置图片的宽度,高度
       # $width 宽度 int
       # $height 高度 int

       $image = Image::make(file_get_contents(public_path('image/fabric.png')));
       $image->resize(200,200);

获取图片bytes

        # encode($format,$quality)->getEncoded() 获取图片的bytes结果
        # $format 图片格式:png|jpg ......
        # $quality 图片质量 int
        $image = $image = Image::make(file_get_contents(public_path('image/fabric.png')));
        $image->encode()->getEncoded();

输出图片

        # response($format,$quality) 输出图片
        # $format 图片格式:png|jpg ......
        # $quality 图片质量 int
        $image = $image = Image::make(file_get_contents(public_path('image/fabric.png')));
        return $image->response('png',90);

设置字体,大小,颜色

        # size($size) 设置字体大小
        # $size int
        # 如果不设置字体,字体大小不生效

        # file($file) 设置字体文件
        # $file位置

        # color($color) 设置字体颜色
        # $color 支持16进制颜色|rgb颜色
        
        $image = Image::canvas(500, 500);
        $image->text("给我点个赞,\n可以不可以。", 100, 200, function ($font) {
            /** @var \Intervention\Image\Gd\Font $font */
            $font->size(25)
                ->file(public_path('font/华文行楷.ttf'))
//                ->color('EBC825');
            ->color([235,200,37]);
        });
        return $image->response();

实例

namespace App\Http\Controllers\Test;

use App\Http\Controllers\Core\CoreController;
use Intervention\Image\Facades\Image;
use SimpleSoftwareIO\QrCode\Facades\QrCode;

/**
 * Class IndexController
 * @package App\Http\Controllers\Test
 */
class IndexController extends CoreController
{
    public function index()
    {
        $canvas = Image::canvas(500, 600);
        $head = Image::make(public_path('image/fabric.png'))
            ->resize(400, 300);
        $text = <<<EOF
君不见黄河之水天上来
奔流到海不复回
君不见高堂明镜悲白发
朝如青丝暮成雪
人生得意须尽欢
莫使金樽空对月
EOF;

        $canvas->insert($head, 'top-left', 50, 50)
            ->insert($this->createQrCode(), 'top-left', 50, 400)
            ->text($text, 220, 415, function ($font) {
                /** @var \Intervention\Image\Gd\Font $font */
                $font->size(22)
                    ->file(public_path('font/华文行楷.ttf'))
                    ->color('#C867E1');
            });
        return $canvas->response('png', 90);
    }

    public function createQrCode()
    {
        return QrCode::format('png')->size(150)->generate('https://github.com');
    }
}

注:
遇到Internal GD font () not available. Use only 1-5.错误
解决方法:

1.把字体文件,放在public文件夹下的fonts文件夹

2.在服务器的话,使用绝对路径也可以,不过在本地调试的话不能使用绝对路径,要用相对地址

相关文章

网友评论

      本文标题:Laravel 图片合成 图片生成

      本文链接:https://www.haomeiwen.com/subject/crbakdtx.html