[league/glide]两行代码实现一套强大的图片处理HTTP服务
只要两行代码,就能实现类似对象存储云提供的基于参数的图片处理,比如裁剪、放大、水印、旋转等等。
我们经常使用第三方的对象存储服务,比如七牛云或阿里云,他们都提供了“智能媒体服务”,其实就是在链接上加上各种参数,实现图片的裁剪、缩放等,可以便捷的实现缩略图,节省网络宽带,加快页面的访问。
原理很简单,就是接收参数然后处理呗。如果用PHP做的话,不难,但是却要写好多代码。操作GD库太麻烦了。但现在,只要两行代码就能实现一套强大的图片处理功能。
// 实例化
$server = League\Glide\ServerFactory::create(['source' => 'path/to/source/folder','cache' => 'path/to/cache/folder',
]);// 可以在第二个参数传入数组
$server->outputImage('users/1.jpg', ['w' => 300, 'h' => 400]);// 更简单的做法,直接传入GET参数
$server->outputImage($path, $_GET);
功能预览表
glide可以接收26个参数,几乎可以涵盖所有的场景需求。
名称 | 功能参数 | 介绍 |
---|---|---|
方向 | or | 旋转图像,支持0, 90, 180或者 270,同时支持auto,会根据图片的Exif 信息自动确定位置 |
翻转 | flip | 翻转图像,支持水平、垂直、圆心等 |
裁剪 | crop | 将图像裁剪到指定尺寸,支持居中、左上角、居左等10多个设置 |
宽度 | w | 设置图像的宽度,根据fit参数表现不同 |
高度 | h | 设置图像的高度,根据fit参数表现不同 |
尺寸效果 | fit | 设置图像如何适应新的尺寸,显示最大宽度、最小宽度、变形、裁剪等等6中效果 |
设备像素比 | dpr | 通过此参数可以生成不同像素比的图片,在苹果和安卓设备中有更好的表现,最大8 |
亮度 | bri | 调整图像亮度 |
对比度 | con | 调整图像对比度 |
伽马 | gam | 调整图像伽马值值 |
锐化 | sharp | 锐化图像 |
模糊 | blur | 为图像增加模糊效果 |
像素化 | pixel | 为图像增加像素化效果 |
滤镜 | filt | 能够指定使用那些滤镜处理图像,内置灰度和褐色,可以自定义。 |
水印路径 | mark | 给图像增加水印 |
水印宽度 | markw | 设置水印的宽度 |
水印高度 | markh | 设置水印的高度 |
水印偏移量X | markx | 水印的X偏移量 |
水印偏移量Y | marky | 水印的Y偏移量 |
水印的填充 | markpad | 水印的填充,padding |
水印的定位 | markpos | 水印的位置,居左、居中等 |
水印的透明度 | markalpha | 设置水印的透明度 |
背景 | bg | 设置图片的背景色 |
边框 | border | 给图片增加边框 |
质量 | q | 设置输入的质量 |
格式 | fm | 设置图像的编码格式,jpg、png等 |
功能介绍
本文对几个重点的功能做个介绍。
尺寸效果 fit
设置图像如何适应新的尺寸。
支持的参数:
contain
: 默认。 调整图像大小以适应宽度和高度边界,而无需裁剪、扭曲或改变纵横比。max
:调整图像大小以适应宽度和高度边界,而不会裁剪、扭曲或改变纵横比,如果图像小于输出尺寸,也不会增加图像的尺寸。fill
:调整图像大小以适应宽度和高度边界,而不裁剪或扭曲图像,剩余空间用背景色填充。 生成的图像将匹配约束尺寸。fill-max
:调整图像大小以适应宽度和高度边界而不裁剪,但如果图像较小则放大图像。 完成的图像将在宽度或高度上具有剩余空间(除非新图像的纵横比与旧图像的纵横比相同)。 剩余空间将用背景色填充。 生成的图像将匹配约束尺寸。stretch
:拉伸图像以完全适合约束尺寸。 生成的图像将填充尺寸,并且不会保持输入图像的纵横比。crop
:调整图像大小以填充宽度和高度边界并裁剪任何多余的图像数据。 生成的图像将匹配宽度和高度限制,而不会扭曲图像。
裁剪 crop
当尺寸效果设置为裁剪时,可以使用裁剪参数。
裁剪位置:
您还可以通过添加裁剪位置来设置裁剪图像的位置。 接受 crop-top-left
, crop-top
, crop-top-right
, crop-left
, crop-center
, crop-right
, crop-bottom-left
, crop-bottom
或者 crop-bottom-right
. 默认是 crop-center
, 并且与 crop
.
作物焦点
除了裁剪位置之外,您还可以使用焦点更具体地确定确切的裁剪位置。 这是使用两个偏移百分比定义的: crop-x%-y%
.
<img src="kayaks.jpg?w=300&h=300&fit=crop-25-75">
您还可以选择通过提供第三个值来放大您的焦点:一个介于 1 和 100 之间的浮点数。每个完整步长相当于 100% 缩放。 (例如。 x%-y%-2
相当于以 200% 的比例查看图像)。 建议的范围是 1-10。
<img src="kayaks.jpg?w=300&h=300&fit=crop-25-75-2">
预裁剪
在任何其他调整大小操作之前将图像裁剪为特定尺寸。 要求的格式: width,height,x,y
. 就像使用截图工具那样,在先在图片上截取一段。
<img src="kayaks.jpg?crop=100,100,915,155">
存储驱动
可以使用flysystem驱动,这意味着不仅可以操作本地的文件,还支持各类存储方式,比如SFTP、FTP、对象存储等等。
// 图片地址
$source = new League\Flysystem\Filesystem(new League\Flysystem\Local\LocalFilesystemAdapter('path/to/source/folder')
);// 缓存地址
$cache = new League\Flysystem\Filesystem(new League\Flysystem\Local\LocalFilesystemAdapter('path/to/cache/folder')
);$server = new League\Glide\Server($source,$cache,
);
标准返回Response
可以通过getImageResponse方法获取标准的PSR-7响应对象,同时官方提供了laravel等框架的扩展响应对象。
默认配置
可以设置默认的图片处理设置。
$server = League\Glide\ServerFactory::create(['defaults' => ['mark' => 'logo.png','markw' => '30w','markpad' => '5w',]
]);
预设
可以提前将各种参数设置好,然后直接传入预设的名称即可。比如下面的代码:
<?php$server = League\Glide\ServerFactory::create(['presets' => ['small' => ['w' => 200,'h' => 200,'fit' => 'crop',],'medium' => ['w' => 600,'h' => 400,'fit' => 'crop',]]
]);
然后直接使用预设就可以了:
<img src="kayaks.jpg?p=small">
也可以同时使用多个预设:
<img src="kayaks.jpg?p=small,watermarked">
甚至可以使用带有附加参数的预设:
<img src="kayaks.jpg?p=small,watermarked&filt=sepia">
图像驱动
支持GD库和Imagick库。
$server = League\Glide\ServerFactory::create([// 默认使用GD'driver' => 'gd',// 使用ImageMagick'driver' => 'imagick',
]);
安装
使用compsoer安装即可。
composer require league/glide
安全保护
glide提供了一套签名机制,通过私钥(一长串字符)生成一个token,只有携带了这个token 才能调用参数,避免人们通过大量的图像调整参数攻击服务器。
配置
<?phpuse League\Glide\Signatures\SignatureFactory;
use League\Glide\Signatures\SignatureException;try {// 设置秘钥$signkey = 'v-LK4WCdhcfcc%jt*VC2cj%nVpu+xQKvLUA%H86kRVk_4bgG8&CWM#k*b_7MUJpmTc=4GFmKFp7=K%67je-skxC5vz+r#xT?62tT?Aw%FtQ4Y3gvnwHTwqhxUh89wCa_';// 验证访问SignatureFactory::create($signkey)->validateRequest($path, $_GET);} catch (SignatureException $e) {// 处理异常
}
生成URL
<?phpuse League\Glide\Urls\UrlBuilderFactory;// 上面的那个秘钥
$signkey = 'v-LK4WCdhcfcc%jt*VC2cj%nVpu+xQKvLUA%H86kRVk_4bgG8&CWM#k*b_7MUJpmTc=4GFmKFp7=K%67je-skxC5vz+r#xT?62tT?Aw%FtQ4Y3gvnwHTwqhxUh89wCa_';// 实例化
$urlBuilder = UrlBuilderFactory::create('/img/', $signkey);// 生成url
$url = $urlBuilder->getUrl('cat.jpg', ['w' => 500]);// 使用url
echo '<img src="'.$url.'">';// 输入预览
<img src="/img/cat.jpg?w=500&s=af3dc18fc6bfb2afb521e587c348b904">
总结
只要简单的几行代码,就实现了一套健全的图片处理HTTP服务,当你有类似的需求的时候,抓紧用上吧。
原文标题:[league/glide]两行代码实现一套强大的图片处理HTTP服务
原文地址:https://phpreturn.com/index/a64084605c3759.html
原文平台:PHP武器库
版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。
[league/glide]两行代码实现一套强大的图片处理HTTP服务相关推荐
- ImageJ-一套强大的图片处理工具
ImageJ 原是为Macintosh 设计的一套科学用图像处理软件,可以显示.编辑.分析.处理8位.16位.32位图像.由于ImageJ 是用Java 开发的,所以它几乎可以在运行再任何平台上. h ...
- gRaphael——JavaScript 矢量图表库:两行代码实现精美图表
gRaphael 是一个致力于帮助开发人员在网页中绘制各种精美图表的 Javascript 库,基于强大的 Raphael 矢量图形库.你只需要编写几行简单的代码就能创建出精美的条形图.饼图.点图和曲 ...
- 只需两行代码,2080Ti 就能当 V100用,这个炼丹神器真牛!
作者 | 陈大鑫.青暮 话说人工智能江湖门派众多且繁杂,好似那大脑中的神经网络一般,但繁杂中却仍然有着一统的迹象...... 许久之前,ML派坐落美利坚合众山中,百年来武学奇才辈出,隐然成江湖第一大名 ...
- Android 强大的图片加载缓存— Glide
在图片加载库烂大街的今天,选择一个适合自己使用的图片加载库已经成为了每一个Android开发者的必经之路.现在市面上知名的图片加载库有UIL,Picasso,Volley ImageLoader,Fr ...
- 强大的图片加载框架Picasso和Glide
一.Picasso Picasso是Square公司出品的一个强大的图片下载和缓存图片库.官方网址是:http://square.github.io/picasso/ 只需要一句代码就可以将图片下载并 ...
- iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求
原文地址:https://github.com/ChenYilong/ParseSourceCodeStudy/blob/master/02_Parse的网络缓存与离线存储/iOS网络缓存扫盲篇.md ...
- ACMNO.27 Python的两行代码解决 C语言-字符逆序 写一函数。使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入 一行字符 输出 逆序后的字符串
题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串. 输入 一行字符 输出 逆序后的字符串 样例输入 123456abcdef 样例输出 fedcba654321 来源 ...
- 你只写了两行代码,为什么要花两天时间?
原文 | https://www.mrlacey.com 作者 | Matt Lacey 我花了两天时间,写了两行代码. 对于真正的程序员来看,这可能是一个合理的事情,但背后不理解程序员的人,往往会做 ...
- 一训练就显存爆炸?Facebook 推出 8 比特优化器,两行代码拯救你的显存
自从人们发现越大的模型性能越好后,神经网络模型的参数量就在越来越大的道路上一去不复返了.从XX-large到GPT3,再到5300亿参数的Megatron Turing-NLG,深度学习越来越像是只有 ...
最新文章
- AI与网络安全的未来:数据集与协同能力
- es6 函数解构的用途
- lisp精要(2)-基础(1)
- 中文NER涨点神器!基于多元数据的双流Transformer编码模型
- Java HashMap与Hashtable数据结构和特点+HashSet简述
- centos 源码安装 mysql
- Material Design组件之NavigationView
- matlab 切割图像像素,matlab – 使用图形切割与种子点的图像分割
- 编程基本功:变量局部化的教训
- CryptoJS加密
- iOS 新浪微博客户端Demo实践之(六) 微博评论列表页面和发评论
- 渝北统景碑口规划开发_渝北区碑口水库主体工程开建
- 在eclipse中查看jar包
- 中新时评:中国经济亮红灯 宏观调控“下猛药
- 《RabbitMQ实战》7.warren和Shovel:故障转移和复制
- 云计算是什么,云计算的特点及主要形式
- Linq 语法(转载)
- html一键使网页字体变大,网页字体变大了怎么办
- python学习---day6
- 灰流丽能无效融合么_【灰流丽】封印卡片一览