Laravel 接入 Intervention Image - 图片处理与操作库
既然使用了框架,就该借助框架之利。
Laravel 之类的框架,或者说现在的所有 PHP 框架都趋向于通过 composer 进行第三方库的自动引入,这样做简洁方便。
composer 安装 Intervention Image
安装 Intervention Image
之前,需要确保 PHP 版本 >=5.4
并且安装了 fileinfo
扩展,以及 GD
库(>=2.0
)或者 Imagick
扩展(>=6.5.7
)。
composer require intervention/image
指令会自动将其添加到 composer.json
依赖中,下载库文件到 vendor
目录下,并更新 composer.lock
文件。
对于服务器上使用 git 部署的代码,只需要在 git pull
后执行 composer update
即可更新库文件。
集成到 Laravel
修改 config/app.php
文件
$providers
中添加:
'providers' => [
...
Intervention\Image\ImageServiceProvider::class,
]
$aliases
中添加:
'aliases' => [
...
'Image' => Intervention\Image\Facades\Image::class,
]
使用 Intervention Image
使用 Laravel 门面引入命名空间:
use Intervention\Image\Facades\Image;
其他框架引入命名空间:
use Intervention\Image\ImageManagerStatic as Image;
重要文档:
Intervention Image - github
Intervention Image - doc
使用 demo:
use Intervention\Image\Facades\Image;
class Images
{
public function getContract($shop_name, $sign_img)
{
$saved_img = config("constants.common.temp_file_location") . date('YmdHis') . '.png';
// $fontPath = public_path('font'.DS.'bb4171.ttf');
$fontPath = public_path('font'.DS.'SourceHanSans-Normal.otf');
// $bg_img = public_path('bg.png');
$bg_img = Image::canvas(658, 931, '#fff');
// $sign_img = Image::canvas(305, 210, '#ccc')->resize(200, 120);
$sign_img = Image::make($sign_img)->resize(200, 120);
$img = Image::make($bg_img)->insert($sign_img, 'bottom-right', 15,10);
$img->text($shop_name, 500, 50, function($font) use($fontPath) {
$font->file($fontPath);
$font->size(20);
$font->color('#333');
// $font->align('left');
// $font->valign('top');
// $font->angle(45);
});
$img->save($saved_img);
return $saved_img;
}
}
demo 功能是在背景图右下角放置签名图片,顶部靠右部分写上商家名称,合在一起的即商户签合同(当然还缺合同内容部分及印章,添加这些内容与添加签名图片使用方法基本一致)。
参考文章:
如何使用 Laravel 图片处理包 intervention-image
laravel 使用 Intervention/image 进行图片处理
报错问题:
Internal GD font () not available. Use only 1-5
Image source not readable in ...
Can't write image data to path ...
第一个是写字字体找不到,当然可以不引入字体文件,但那样样式会无法掌控,建议下载一个思源黑体(版权免费)。
第二个是 make()
创建 Image 对象,找不到图片资源。
第三个是 save()
保存 Image 对象,路径无法写入数据。
三个问题其实是一个问题,就是文件的路径问题。或者使用相对于 public 的路径,或者是全路径,我选择了后者。
线上使用时报错:Symfony\Component\Debug\Exception\FatalThrowableError: Class 'Intervention\Image\ImageServiceProvider' not found
,是因为部署环境下没有安装,需要在 git pull
后执行 composer update
来更新库文件。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。