Laravel Intervention/image图像处理扩展包的安装和使用以及可能的凹坑的详细说明
序
Intervention/image是为Laravel定制的图像处理工具,它提供了一种易于表达的方式来创建和编辑图像。
请参见演示代码:
https://github.com/zhengjinghua/est-image-demo
本地下载:http://xiaozai.jb51.net/201711/yuanma/est-image-demo(jb51.net)
演示
演示截图
演示运行
请参考文档如何使用宅基地快速运行一个Laravel项目。
文章概述
安装;修改配置信息;基本用法;特性和功能。以下是详细说明。
1.装置
1).使用composer安装:
作曲家需要干预/图像上述命令将
2).修改app/config/app.php并添加ServiceProvider:
//将以下代码添加到providers数组“providers”=[//.干预\ image \ imageservice provider :3360 class,//.],//将以下代码添加到别名数组“alias”中=[//.image'=介入\ image \ facades \ image :3360 class,//.], 2.图像处理库的配置
这个扩展包默认使用PHP的GD库进行图像处理,但是因为GD库在图像处理效率上不如imagemagick库,所以建议用imagemagick库代替进行图像处理。
开始之前,您必须确保本地安装了GD或Imagick。
使用介入映像时,您只需要向映像管理器传递一个数组参数,就可以在GD和Imagick库之间进行切换。
:如下所示
//引入composer autoload require ' vendor/autoload . PHP ';//导入介入图像管理器类使用介入\图像\图像管理器;//通过指定driver $ manager=new image manager(array(' driver '=' imag ick '))来创建映像管理器实例;//最后创建一个图像实例$ image=$ manager-make(' public/foo . jpg ')-resize(300,200);此外,还可以使用静态版本的ImageManager,如下图:所示
//引入composer autoload require ' vendor/autoload . PHP ';//导入介入图像管理器类使用介入\图像\图像管理器静态作为图像;//通过指定驱动程序(默认使用GD)image :3360 configure(array(' driver '=' imag ick '))来创建映像管理器实例;//最后创建一个图像实例$ image=image :3360 make(' public/foo . jpg ')-resize(300,200);生成config/image.php配置文件:
Php artisan厂商: publish-provider=' intervention \ image \ imageservice provider laravel 5 '运行上述命令后,将在项目中生成config/image.php配置文件,打开该文件并将驱动程序修改为imagick:
返回数组(' driver '=' imag ick ');至此,扩展包安装成功!
3.基本用法
//修改指定图片的大小$ img=image :3360 make(' images/avatar . jpg ')-resize(200,200);//插入水印,水印位于原图片右下角,距离下边缘10像素,距离右边缘15像素。$ img-insert(' images/watermark . png ','右下角',15,10);//将处理后的图片保存到另一个路径$ img-Save(' images/new _ avatar . jpg ');/*以上逻辑可以通过链式表达式*/$ img=image :3360 make(' images/avatar . jpg ')-resize(200,200)-insert(' images/new _ avatar . jpg ','右下角',15,10)求解;4.特色功能
除了上述基本用法之外,该扩展包还支持:
图像上传功能;图像缓存功能;图片过滤功能:根据统一规则转换图片;图片动态处理:根据访问图片的URL参数自动调整图片大小。更多示例,请参考官方文件参考。
干预/图像中的一个小坑及其解决方案
实际上,intervention/iamge已经使用了一段时间,它的api设计非常简单,文档也非常全面,使用起来相当方便。
然而,最近偶然发现了一个小坑。因为我们需要用微信头像合成二维码,所以我用Image:make($avatarUrl)(其中$avatarUrl是微信头像的链接)生成头像,然后合成二维码图像(包括一些其他操作,比如使用模板背景和写文字)。
写完运行后发现相当慢,平均23秒左右。一开始我以为是因为合成过程操作多,体积大,本来应该是这个速度。但是后来闲下来的时候,我开始尝试优化。即使我不能提高我的速度,我至少明白了什么是如此耗时。
经过这次磨难,人们发现真相与合成操作的数量和规模关系不大。而关键在于我创建头像数据的姿势。
为了说明这个问题,下面的代码是专门为比较而写的。
//记录开始时间$startTimestamp=微时间(true);$ URL=' http://wx . qlogo.cn/MMO pen/xxt9 tiaj 1 IBF 06 nrcmjqads4 pdhvqlgulzhpqkrlvujyzicvjw 4 iaalpskis 0 kpz 3 f 6864 zzyboybyiaukqsrdp 4 pftndyipxw/0 ';$ avatar=\ image :3360 make($ URL);//记录结束时间$ end timestamp=micro time(true);info($ startTimestamp);info($ end timestamp);信息($ end timestamp-$ start timestamp);
上面的代码使用Image:make($url)的形式从url直接生成头像。根据记录的日志数据,大约需要16秒。
后来想到了一个新的姿势,其实是我尝试优化的时候想到的。请参见以下代码:
$startTimestamp=microtime(真);$ Client=new \ guzzhehttp \ Client();$ URL=' http://wx . qlogo.cn/MMO pen/xxt9 tiaj 1 IBF 06 nrcmjqads4 pdhvqlgulzhpqkrlvujyzicvjw 4 iaalpskis 0 kpz 3 f 6864 zzyboybyiaukqsrdp 4 pftndyipxw/0 ';$ avatar response=$ client-get($ URL);$ avatar=\ image :3360 make($ avatar response-getBody()-getContents());$ end timestamp=micro time(true);info($ startTimestamp);info($ end timestamp);信息($ end timestamp-$ start timestamp);在这里,我首先使用GuzzleHttp获取头像,然后使用image:3360 make ($ data)创建头像。
注意,要高潮了.太阳镜
看看下面的日志截图,三次平均时间约为0.07秒,比之前的16秒差了200多倍。
至于为什么会出现这种现象,我自己也不明白,但无疑是一种有益的、小众的体验。
摘要
以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。
版权声明:Laravel Intervention/image图像处理扩展包的安装和使用以及可能的凹坑的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。