
文章插图
概述每一个做过WEB程序开发的程序员(比如,博客、电商) , 应该都有这样的体验 , 有时候我们需要在不同的页面显示不同尺寸的图片 , 比如 , 首页、商品列表页、详情页 , 如下:
首页

文章插图
列表页

文章插图
详情页

文章插图
【PHP图层裁剪服务搭建详解】
以上的需求 , 每天都在发生 , 虽然可以通过css来控制显示大小 。但是如果图片过大 , 会造成加载的延迟 , 影响网站整体性能 。因此 , 我们需要一个服务器来帮助我们进行图片的裁剪 。传统做法是 , 上传原图像 , 然后根据提前规划好的尺寸进行图片的裁剪 , 然后保存各种尺寸的缩略图 , 每种尺寸的缩略图都在磁盘上有一个文件及文件名 , 下次访问时通过图片名称访问不同的缩略图 , 当有新的尺寸需求时 , 修改代码 , 多生成一个尺寸的缩略图 , 如下类似的代码 , 假设使用一个函数来生成缩略图:
cutImg(100,100); //裁剪为100*100的缩略图 cutImg(100,200); //裁剪为100*200的缩略图 /* 这时添加一个新需求 , 500*500 像素的缩略图 */ cutImg(500,500); //这里添加一条代码生成一个新需求这种方式不够优雅 , 于是我们想想 , 有没有办法采用另一种方式 , 比如 , 我只上传一张图片 , 在使用时 , 通过需求可以显示任务尺寸的缩略图 , 而且不用预先规划 , 如:
这是一张原图:
图片地址:http://qiniu.imecho.cn/apic15589.png

文章插图
1、裁剪 100 * 100
如果这时根据UI的布局需求 , 需要一张:100px * 100px 的图片
这时我发送一个请求:http://qiniu.imecho.cn/apic15589.png?imageView2/1/w/100/h/100

文章插图
2、裁剪 200 * 50
如果有一个页面还是显示同一张图片 , 但这时要求图片大小是: 200px * 50px 的图片
这时我们发送一个请求:http://qiniu.imecho.cn/apic15589.png?imageView2/1/w/200/h/50

文章插图
发送请求:http://qiniu.imecho.cn/apic15589.png?imageView2/0/w/200/h/50

文章插图
3、圆角图片
如果 , 另外一个页面 , 我需要一个圆角图片 ?。。。难道只能使用CSS吗?当然不是 , 请看下面:
发送请求:http://qiniu.imecho.cn/apic15589.png?roundPic/radius/30

文章插图
4、加水印
如果 , 我要加一个水印呢:传统方法 , 得在代码里添加: 添加水印的代码 , 比如:
addWater('原图路径','水印图路径',$top,$left); //$top 距原图上边的距离 , $left 距原图左边的距离而且水印是固定的 , 一但生成水印 , 需要修改水印 , 需要重修改代码 , 同时 , 再次执行代码 , 那能不能通过请求来来动态生成水印呢?肯定是可以的 , 如:
请求:http://qiniu.imecho.cn/apic15589.png?watermark/1/image/aHR0cHM6Ly93d3cuYmFpZHUuY29tL2ltZy9iZF9sb2dvMS5wbmc=/dissolve/100/dx/50/dy/200

文章插图
5、压缩图片
如果图片文件太大 , 网络传输时间太长 , 想要压缩:如下:
压缩前

文章插图
压缩后

文章插图
还有更多的需求 , 比如图片旋转 , 图片调色 , 图片格式转换等 , 是否可以通过这种动态生成图片的方式实现呢 , 而且完全不用修改原代码 , 直接通过请求参数实现
推荐阅读
- docker安装php
- phpstudy搭建本地服务
- php经典趣味算法
- 如何比较两个PHP多维数组
- PHP代码检测网址是否被百度收录
- PHP异常处理那些事
- PHP验证邮箱是否合格
- phpstudy 404页面设置
- PS如何将几个图层排列在同一水平或垂直线上
- php执行超时导致WordPress升级失败
