* 高品质的图像处理扩展包 官网:https://glide.thephpleague.com/
作用效果
![](https://img.kancloud.cn/39/47/3947e23bdf98c275aa00a40874845b74_1009x790.png)
原理很简单,就是接收参数然后处理呗。如果用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);
```
![](https://img.kancloud.cn/9b/f4/9bf4192579796c9c05c92e733f6c9226_979x752.png)
![](https://img.kancloud.cn/da/c0/dac096561e6395c3dcf10f635502e173_968x402.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%`.
~~~html
<img src="kayaks.jpg?w=300&h=300&fit=crop-25-75">
~~~
您还可以选择通过提供第三个值来放大您的焦点:一个介于1和100之间的浮点数。每个完整步长相当于100%缩放。 (例如。`x%-y%-2`相当于以200%的比例查看图像)。 建议的范围是1-10。
~~~html
<img src="kayaks.jpg?w=300&h=300&fit=crop-25-75-2">
~~~
预裁剪
在任何其他调整大小操作之前将图像裁剪为特定尺寸。 要求的格式:`width,height,x,y`.就像使用截图工具那样,在先在图片上截取一段。
~~~html
<img src="kayaks.jpg?crop=100,100,915,155">
~~~
### 存储驱动
可以使用flysystem驱动,这意味着不仅可以操作本地的文件,还支持各类存储方式,比如SFTP、FTP、对象存储等等。
~~~php
// 图片地址
$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等框架的扩展响应对象。
### 默认配置
可以设置默认的图片处理设置。
~~~php
$server = League\Glide\ServerFactory::create([
'defaults' => [
'mark' => 'logo.png',
'markw' => '30w',
'markpad' => '5w',
]
]);
~~~
### 预设
可以提前将各种参数设置好,然后直接传入预设的名称即可。比如下面的代码:
~~~php
<?php
$server = League\Glide\ServerFactory::create([
'presets' => [
'small' => [
'w' => 200,
'h' => 200,
'fit' => 'crop',
],
'medium' => [
'w' => 600,
'h' => 400,
'fit' => 'crop',
]
]
]);
~~~
然后直接使用预设就可以了:
~~~html
<img src="kayaks.jpg?p=small">
~~~
也可以同时使用多个预设:
~~~html
<img src="kayaks.jpg?p=small,watermarked">
~~~
甚至可以使用带有附加参数的预设:
~~~html
<img src="kayaks.jpg?p=small,watermarked&filt=sepia">
~~~
### 图像驱动
支持GD库和Imagick库。
~~~php
$server = League\Glide\ServerFactory::create([
// 默认使用GD
'driver' => 'gd',
// 使用ImageMagick
'driver' => 'imagick',
]);
~~~
## 安装
使用compsoer安装即可。
~~~bash
composer require league/glide
~~~
## 安全保护
glide提供了一套签名机制,通过私钥(一长串字符)生成一个token,只有携带了这个token才能调用参数,避免人们通过大量的图像调整参数攻击服务器。
### 配置
~~~php
<?php
use 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
~~~php
<?php
use 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](https://phpreturn.com/index/a64084605c3759.html)
原文平台:[PHP武器库](http://phpreturn.com/)
版权声明:本文由[phpreturn.com](http://phpreturn.com/)(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。
- Golang
- Beego框架
- Gin框架
- gin框架介绍
- 使用Gin web框架的知名开源线上项目
- go-admin-gin
- air 热启动
- 完整的form表单参数验证语法
- Go 语言入门练手项目推荐
- Golang是基于多线程模型
- golang 一些概念
- Golang程序开发注意事项
- fatal error: all goroutines are asleep - deadlock
- defer
- Golang 的内建调试器
- go部署
- golang指针重要性
- 包(golang)
- Golang框架选型比较: goframe, beego, iris和gin
- GoFrame
- golang-admin-项目
- go module的使用方法及原理
- go-admin支持多框架的后台系统(go-admin.cn)
- docker gocv
- go-fac
- MSYS2
- 企业开发框架系统推荐
- gorm
- go-zero
- 优秀系统
- GinSkeleton(gin web 及gin 知识)
- 一次 request -> response 的生命周期概述
- 路由与路由组以及gin源码学习
- 中间件以及gin源码学习
- golang项目部署
- 独立部署golang
- 代理部署golang
- 容器部署golang
- golang交叉编译
- goravel
- kardianos+gin 项目作为windows服务运行
- go env
- 适用在Windows、Linux和macOS环境下打包Go应用程序的详细步骤和命令
- Redis
- Dochub
- Docker部署开发go环境
- Docker部署运行go环境
- dochub说明
- Vue
- i18n
- vue3
- vue3基本知识
- element-plus 表格单选
- vue3后台模板
- Thinkphp
- Casbin权限控制中间件
- 容器、依赖注入、门面、事件、中间件
- tp6问答
- 伪静态
- thinkphp-queue
- think-throttle
- thinkphp队列queue的一些使用说明,queue:work和queue:listen的区别
- ThinkPHP6之模型事件的触发条件
- thinkphp-swoole
- save、update、insert 的区别
- Socket
- workerman
- 介绍
- 从ThinkPHP6移植到Webman的一些技术和经验(干货)
- swoole
- swoole介绍
- hyperf
- hf官网
- Swoft
- swoft官网
- easyswoole
- easyswoole官网地址
- EASYSWOOLE 聊天室DEMO
- socket问答
- MySQL
- 聚簇索引与非聚簇索引
- Mysql使用max获取最大值细节
- 主从复制
- 随机生成20万User表的数据
- MySQL进阶-----前缀索引、单例与联合索引
- PHP
- 面向切面编程AOP
- php是单线程的一定程度上也可以看成是“多线程”
- PHP 线程,进程、并发、并行 的理解
- excel数据画表格图片
- php第三方包
- monolog/monolog
- league/glide
- 博客-知识网站
- php 常用bc函数
- PHP知识点的应用场景
- AOP(面向切面编程)
- 注解
- 依赖注入
- 事件机制
- phpspreadsheet导出数据和图片到excel
- Hyperf
- mineAdmin
- 微服务
- nacos注册服务
- simps-mqtt连接客户端simps
- Linux
- 切换php版本
- Vim
- Laravel
- RabbitMQ
- thinkphp+rabbitmq
- 博客
- Webman框架
- 框架注意问题
- 关于内存泄漏
- 移动端自动化
- 懒人精灵
- 工具应用
- render
- gitlab Sourcetree
- ssh-agent失败 错误代码-1
- 资源网站
- Git
- wkhtmltopdf
- MSYS2 介绍
- powershell curl 使用教程
- NSSM(windows服务工具)
- MinGW64
- 知识扩展
- 对象存储系统
- minio
- 雪花ID
- 请求body参数类型
- GraphQL
- js 深拷贝
- window 共享 centos文件夹
- 前端get/post 请求 特殊符号 “+”传参数问题
- 什么是SCM系统?SCM系统与ERP系统有什么区别?
- nginx 日志格式统一为 json
- 特殊符号怎么打
- 收藏网址
- 收藏-golang
- 收藏-vue3
- 收藏-php
- 收藏-node
- 收藏-前端
- 规划ITEM
- 旅游类
- 人脸识别
- dlib
- Docker&&部署
- Docker-compose
- Docker的网络模式
- rancher
- DHorse
- Elasticsearch
- es与kibana都docke连接
- 4种数据同步到Elasticsearch方案
- GPT
- 推荐系统
- fastposter海报生成
- elasticsearch+logstash+kibana
- beego文档系统-MinDoc
- jeecg开源平台
- Java
- 打包部署
- spring boot
- 依赖
- Maven 相关 命令
- Gradle 相关命令
- mybatis
- mybatis.plus
- spring boot 模板引擎
- SpringBoot+Maven多模块项目(创建、依赖、打包可执行jar包部署测试)完整流程
- Spring Cloud
- Sentinel
- nacos
- Apollo
- java推荐项目
- gradle
- Maven
- Nexus仓库管理器
- Python
- Masonite框架
- scrapy
- Python2的pip2
- Python3 安装 pip3
- 安全攻防
- 运维技术
- 腾讯云安全加固建议
- 免费freessl证书申请
- ruby
- homeland
- Protobuf
- GIT
- FFMPEG
- 命令说明
- 音频
- ffmpeg合并多个MP4视频
- NODEJS
- 开发npm包
- MongoDB
- php-docker-mongodb环境搭建
- mongo基本命令
- Docker安装MongoDB最新版并连接
- 少儿编程官网
- UI推荐
- MQTT
- PHP连接mqtt
- EMQX服务端
- php搭建mqtt服务端