ThinkPHP官方为大家常用图像处理提供了一个Image类,大家下载完整包,就能看到`/ThinkPHP/Library/Think/Image.class.php` 这个类文件。
使用Think\Image类进行图像处理功能,支持Gd库和Imagick库,包括对GIf图像处理的支持。
> 使用Imagick库 一定要确保该扩展可用哦,像coding.net演示是安装可以通过配置支持的。
## 实例化类库
~~~
$image = new \Think\Image();
~~~
默认使用GD库进行图像操作,如果需要使用Imagick库操作的话,需要改成:
~~~
$image = new \Think\Image(\Think\Image::IMAGE_IMAGICK);
// 或者采用
$image = new \Think\Image('Imagick');
~~~
## 图像操作
下面来看下基础的图像操作功能的使用方法。
### 打开图像文件
假设当前入口文件目录下面有一个1.jpg文件,如图所示:
![1](http://box.kancloud.cn/2015-04-18_5531edd219dd2.png)
使用open方法打开图像文件进行相关操作:
~~~
$image = new \Think\Image();
$image->open('./1.jpg');
~~~
也可以简化成下面的方式:
~~~
$image = new \Think\Image(\Think\Image::IMAGE_GD,'./1.jpg'); // GD库
// 或者
$image = new \Think\Image(\Think\Image::IMAGE_IMAGICK,'./1.jpg'); // imagick库
~~~
### 获取图像信息
可以获取打开图片的信息,包括图像大小、类型等,例如:
~~~
$image = new \Think\Image();
$image->open('./1.jpg');
$width = $image->width(); // 返回图片的宽度
$height = $image->height(); // 返回图片的高度
$type = $image->type(); // 返回图片的类型
$mime = $image->mime(); // 返回图片的mime类型
$size = $image->size(); // 返回图片的尺寸数组 0 图片宽度 1 图片高度
~~~
### 裁剪图片
使用crop和save方法完成裁剪图片功能。
~~~
$image = new \Think\Image();
$image->open('./1.jpg');
//将图片裁剪为400x400并保存为corp.jpg
$image->crop(400, 400)->save('./crop.jpg');
~~~
生成的图片如图:
![crop](http://box.kancloud.cn/2015-04-18_5531edd232df9.png)
支持从某个坐标开始裁剪,例如下面从(100,30)开始裁剪:
~~~
$image = new \Think\Image();
$image->open('./1.jpg');
//将图片裁剪为400x400并保存为corp.jpg
$image->crop(400, 400,100,30)->save('./crop.jpg');
~~~
生成的图片如图:
![crop](http://box.kancloud.cn/2015-04-18_5531edd24868d.png)
### 生成缩略图
使用thumb方法生成缩略图
~~~
$image = new \Think\Image();
$image->open('./1.jpg');
// 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.jpg
$image->thumb(150, 150)->save('./thumb.jpg');
~~~
生成的缩略图如图所示:
![thumb](http://box.kancloud.cn/2015-04-18_5531edd25b6eb.png)
我们看到实际生成的缩略图并不是150*150,因为默认采用原图等比例缩放的方式生成缩略图,最大宽度是150。
可以支持其他类型的缩略图生成,设置包括Think\Image的下列常量或者对应的数字:
~~~
IMAGE_THUMB_SCALE = 1 ; //等比例缩放类型
IMAGE_THUMB_FILLED = 2 ; //缩放后填充类型
IMAGE_THUMB_CENTER = 3 ; //居中裁剪类型
IMAGE_THUMB_NORTHWEST = 4 ; //左上角裁剪类型
IMAGE_THUMB_SOUTHEAST = 5 ; //右下角裁剪类型
IMAGE_THUMB_FIXED = 6 ; //固定尺寸缩放类型
~~~
例如:
#### 居中裁剪
~~~
$image = new \Think\Image();
$image->open('./1.jpg');
// 生成一个居中裁剪为150*150的缩略图并保存为thumb.jpg
$image->thumb(150, 150,\Think\Image::IMAGE_THUMB_CENTER)->save('./thumb.jpg');
~~~
居中裁剪后生成的缩略图效果如图:
![thumb](http://box.kancloud.cn/2015-04-18_5531edd265159.png)
#### 左上角剪裁
~~~
$image = new \Think\Image();
$image->open('./1.jpg');
// 生成一个左上角裁剪为150*150的缩略图并保存为thumb.jpg
$image->thumb(150, 150,\Think\Image::IMAGE_THUMB_NORTHWEST)->save('./thumb.jpg');
~~~
左上角裁剪后生成的缩略图效果如图:
![thumb](http://box.kancloud.cn/2015-04-18_5531edd278ca6.png)
#### 缩放填充
~~~
$image = new \Think\Image();
$image->open('./1.jpg');
// 生成一个缩放后填充大小150*150的缩略图并保存为thumb.jpg
$image->thumb(150, 150,\Think\Image::IMAGE_THUMB_FILLED)->save('./thumb.jpg');
~~~
缩放填充后生成的缩略图效果如图:
![thumb](http://box.kancloud.cn/2015-04-18_5531edd2846d6.png)
#### 固定大小
~~~
$image = new \Think\Image();
$image->open('./1.jpg');
// 生成一个固定大小为150*150的缩略图并保存为thumb.jpg
$image->thumb(150, 150,\Think\Image::IMAGE_THUMB_FIXED)->save('./thumb.jpg');
~~~
采用固定大小的缩略图可能会有所变形,生成的缩略图效果如图:
![thumb](http://box.kancloud.cn/2015-04-18_5531edd28ee34.png)
### 添加图片水印
~~~
$image = new \Think\Image();
$image->open('./1.jpg');
//将图片裁剪为440x440并保存为corp.jpg
$image->crop(440, 440)->save('./crop.jpg');
// 给裁剪后的图片添加图片水印(水印文件位于./logo.png),位置为右下角,保存为water.gif
$image->water('./logo.png')->save("water.gif");
// 给原图添加水印并保存为water_o.gif(需要重新打开原图)
$image->open('./1.jpg')->water('./logo.png')->save("water_o.gif");
~~~
water方法的第二个参数表示水印的位置,可以传入下列Think\Imag类的常量或者对应的数字:
~~~
IMAGE_WATER_NORTHWEST = 1 ; //左上角水印
IMAGE_WATER_NORTH = 2 ; //上居中水印
IMAGE_WATER_NORTHEAST = 3 ; //右上角水印
IMAGE_WATER_WEST = 4 ; //左居中水印
IMAGE_WATER_CENTER = 5 ; //居中水印
IMAGE_WATER_EAST = 6 ; //右居中水印
IMAGE_WATER_SOUTHWEST = 7 ; //左下角水印
IMAGE_WATER_SOUTH = 8 ; //下居中水印
IMAGE_WATER_SOUTHEAST = 9 ; //右下角水印
~~~
例如:
~~~
$image = new \Think\Image();
// 在图片左上角添加水印(水印文件位于./logo.png) 并保存为water.jpg
$image->open('./1.jpg')->water('./logo.png',\Think\Image::IMAGE_WATER_NORTHWEST)->save("water.jpg");
~~~
生成的图片效果如下:
![water](http://box.kancloud.cn/2015-04-18_5531edd298e86.png)
还可以支持水印图片的透明度(0~100,默认值是80),例如:
~~~
$image = new \Think\Image();
// 在图片左上角添加水印(水印文件位于./logo.png) 水印图片的透明度为50 并保存为water.jpg
$image->open('./1.jpg')->water('./logo.png',\Think\Image::IMAGE_WATER_NORTHWEST,50)->save("water.jpg");
~~~
生成的效果如下:
![water](http://box.kancloud.cn/2015-04-18_5531edd2b0615.png)
也可以支持给图片添加文字水印(假设在入口文件的同级目录下存在1.ttf字体文件),例如:
~~~
$image = new \Think\Image();
// 在图片右下角添加水印文字 ThinkPHP 并保存为new.jpg
$image->open('./1.jpg')->text('ThinkPHP','./1.ttf',20,'#000000',\Think\Image::IMAGE_WATER_SOUTHEAST)->save("new.jpg");
~~~
生成的图片效果:
![new](http://box.kancloud.cn/2015-04-18_5531edd2c73b8.png)
- 序
- 前言
- 内容简介
- 目录
- 基础知识
- 起步
- 控制器
- 模型
- 模板
- 命名空间
- 进阶知识
- 路由
- 配置
- 缓存
- 权限
- 扩展
- 国际化
- 安全
- 单元测试
- 拿来主义
- 调试方法
- 调试的步骤
- 调试工具
- 显示trace信息
- 开启调试和关闭调试的区别
- netbeans+xdebug
- Socketlog
- PHP常见错误
- 小黄鸭调试法,每个程序员都要知道的
- 应用场景
- 第三方登录
- 图片处理
- 博客
- SAE
- REST实践
- Cli
- ajax分页
- barcode条形码
- excel
- 发邮件
- 汉字转全拼和首字母,支持带声调
- 中文分词
- 浏览器useragent解析
- freelog项目实战
- 需求分析
- 数据库设计
- 编码实践
- 前端实现
- rest接口
- 文章发布
- 文件上传
- 视频播放
- 音乐播放
- 图片幻灯片展示
- 注册和登录
- 个人资料更新
- 第三方登录的使用
- 后台
- 微信的开发
- 首页及个人主页
- 列表
- 归档
- 搜索
- 分页
- 总结经验
- 自我提升
- 进行小项目的锻炼
- 对现有轮子的重构和移植
- 写技术博客
- 制作视频教程
- 学习PHP的知识和新特性
- 和同行直接沟通、交流
- 学好英语,走向国际
- 如何参与
- 浏览官网和极思维还有看云
- 回答ThinkPHP新手的问题
- 尝试发现ThinkPHP的bug,告诉官方人员或者push request
- 开发能提高效率的ThinkPHP工具
- 尝试翻译官方文档
- 帮新手入门
- 创造基于ThinkPHP的产品,进行连带推广
- 展望未来
- OneThink
- ThinkPHP4
- 附录