只要两行代码,就能实现类似对象存储云提供的基于参数的图片处理,比如裁剪、放大、水印、旋转等等。

我们经常使用第三方的对象存储服务,比如七牛云或阿里云,他们都提供了“智能媒体服务”,其实就是在链接上加上各种参数,实现图片的裁剪、缩放等,可以便捷的实现缩略图,节省网络宽带,加快页面的访问。

原理很简单,就是接收参数然后处理呗。如果用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服务相关推荐

  1. ImageJ-一套强大的图片处理工具

    ImageJ 原是为Macintosh 设计的一套科学用图像处理软件,可以显示.编辑.分析.处理8位.16位.32位图像.由于ImageJ 是用Java 开发的,所以它几乎可以在运行再任何平台上. h ...

  2. gRaphael——JavaScript 矢量图表库:两行代码实现精美图表

    gRaphael 是一个致力于帮助开发人员在网页中绘制各种精美图表的 Javascript 库,基于强大的 Raphael 矢量图形库.你只需要编写几行简单的代码就能创建出精美的条形图.饼图.点图和曲 ...

  3. 只需两行代码,2080Ti 就能当 V100用,这个炼丹神器真牛!

    作者 | 陈大鑫.青暮 话说人工智能江湖门派众多且繁杂,好似那大脑中的神经网络一般,但繁杂中却仍然有着一统的迹象...... 许久之前,ML派坐落美利坚合众山中,百年来武学奇才辈出,隐然成江湖第一大名 ...

  4. Android 强大的图片加载缓存— Glide

    在图片加载库烂大街的今天,选择一个适合自己使用的图片加载库已经成为了每一个Android开发者的必经之路.现在市面上知名的图片加载库有UIL,Picasso,Volley ImageLoader,Fr ...

  5. 强大的图片加载框架Picasso和Glide

    一.Picasso Picasso是Square公司出品的一个强大的图片下载和缓存图片库.官方网址是:http://square.github.io/picasso/ 只需要一句代码就可以将图片下载并 ...

  6. iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求

    原文地址:https://github.com/ChenYilong/ParseSourceCodeStudy/blob/master/02_Parse的网络缓存与离线存储/iOS网络缓存扫盲篇.md ...

  7. ACMNO.27 Python的两行代码解决 C语言-字符逆序 写一函数。使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入 一行字符 输出 逆序后的字符串

    题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串. 输入 一行字符 输出 逆序后的字符串 样例输入 123456abcdef 样例输出 fedcba654321 来源 ...

  8. 你只写了两行代码,为什么要花两天时间?

    原文 | https://www.mrlacey.com 作者 | Matt Lacey 我花了两天时间,写了两行代码. 对于真正的程序员来看,这可能是一个合理的事情,但背后不理解程序员的人,往往会做 ...

  9. 一训练就显存爆炸?Facebook 推出 8 比特优化器,两行代码拯救你的显存

    自从人们发现越大的模型性能越好后,神经网络模型的参数量就在越来越大的道路上一去不复返了.从XX-large到GPT3,再到5300亿参数的Megatron Turing-NLG,深度学习越来越像是只有 ...

最新文章

  1. AI与网络安全的未来:数据集与协同能力
  2. es6 函数解构的用途
  3. lisp精要(2)-基础(1)
  4. 中文NER涨点神器!基于多元数据的双流Transformer编码模型
  5. Java HashMap与Hashtable数据结构和特点+HashSet简述
  6. centos 源码安装 mysql
  7. Material Design组件之NavigationView
  8. matlab 切割图像像素,matlab – 使用图形切割与种子点的图像分割
  9. 编程基本功:变量局部化的教训
  10. CryptoJS加密
  11. iOS 新浪微博客户端Demo实践之(六) 微博评论列表页面和发评论
  12. 渝北统景碑口规划开发_渝北区碑口水库主体工程开建
  13. 在eclipse中查看jar包
  14. 中新时评:中国经济亮红灯 宏观调控“下猛药
  15. 《RabbitMQ实战》7.warren和Shovel:故障转移和复制
  16. 云计算是什么,云计算的特点及主要形式
  17. Linq 语法(转载)
  18. html一键使网页字体变大,网页字体变大了怎么办
  19. python学习---day6
  20. 灰流丽能无效融合么_【灰流丽】封印卡片一览

热门文章

  1. java提示null_java 出现NullPointerException的原因及解决办法
  2. 使用graphviz画股权结构图
  3. 我的大学计算机课 作文,我的大学时光作文1000字
  4. 手机充电器CB认证哪里可以办理?CB报告转沙特IECEE报告方法
  5. 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
  6. Python 实现局域网远程屏幕截图
  7. P1177 【模板】快速排序
  8. 计算机基础知识速记,计算机二级公共基础知识速记.pdf
  9. boost I 数学领域常用的六个库
  10. L2-021 点赞狂魔(set)