×
基础获取ThinkPHPThinkPHP环境要求ThinkPHP目录结构ThinkPHP入口文件自动生成ThinkPHP模块ThinkPHP控制器ThinkPHP开发规范配置配置格式配置加载读取配置动态配置扩展配置批量配置

架构

模块化设计URL模式多层MVCCBD模式命名空间自动加载应用模式项目编译系统流程路由路由定义规则路由正则路由静态路由闭包支持实例说明

控制器

控制器定义前置和后置操作Action参数绑定伪静态URL大小写URL生成AJAX返回跳转和重定向输入变量请求类型空操作空控制器插件控制器操作绑定到类模型模型定义模型实例化字段定义连接数据库切换数据库分布式数据库支持连贯操作WHERETABLEALIASDATAFIELDORDERLIMITPAGEGROUPHAVINGJOINUNIONDISTINCTLOCKCACHECOMMENTRELATIONUSINGfetchSqlTOKENSTRICTINDEX命名范围CURD操作数据创建数据写入数据读取数据更新数据删除ActiveRecord字段映射

查询语言

查询方式表达式查询快捷查询区间查询组合查询统计查询SQL查询动态查询子查询自动验证自动完成参数绑定虚拟模型模型分层视图模型关联模型高级模型Mongo模型视图模板定义模板主题模板赋值模板渲染获取模板地址获取内容模板引擎模板变量输出系统变量使用函数默认值输出使用运算符标签库模板继承修改定界符三元运算包含文件内置标签比较标签范围判断标签IF标签Present标签Empty标签Defined标签Volist标签Assign标签Foreach标签Define标签For标签标签嵌套Switch标签import标签使用PHP代码原样输出模板注释模板布局模板替换调试调试模式异常处理日志记录页面TraceTrace方法变量调试性能调试错误调试模型调试缓存数据缓存快速缓存查询缓存SQL解析缓存静态缓存安全输入过滤表单合法性检测表单令牌防止SQL注入目录安全文件保护模板文件上传安全防止XSS攻击其他安全建议扩展类库扩展驱动扩展缓存驱动数据库驱动日志驱动Session驱动存储驱动模板引擎驱动标签库驱动行为扩展标签扩展Widget扩展应用模式部署PATH_INFO支持URL重写模块部署域名部署入口绑定替换入口专题SESSION支持Cookie支持多语言支持数据分页文件上传验证码图像处理RESTFulRPCSAE

微信SDK

WechatIP获取和定位附录常量参考配置参考升级指导鸣谢

图像处理


使用ThinkImage类进行图像处理功能,支持Gd库和Imagick库,包括对GIf图像处理的支持。

实例化类库

$image = new ThinkImage(); 

默认使用GD库进行图像操作,如果需要使用Imagick库操作的话,需要改成:

$image = new ThinkImage(ThinkImage::IMAGE_IMAGICK); 
// 或者采用
$image = new ThinkImage('Imagick'); 

图像操作

下面来看下基础的图像操作功能的使用方法。

打开图像文件

假设当前入口文件目录下面有一个1.jpg文件,如图所示:

1

使用open方法打开图像文件进行相关操作:

$image = new ThinkImage(); 
$image->open('./1.jpg');

也可以简化成下面的方式:

$image = new ThinkImage(ThinkImage::IMAGE_GD,'./1.jpg'); // GD库
// 或者
$image = new ThinkImage(ThinkImage::IMAGE_IMAGICK,'./1.jpg');  // imagick库

获取图像信息

可以获取打开图片的信息,包括图像大小、类型等,例如:

$image = new ThinkImage(); 
$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 ThinkImage(); 
$image->open('./1.jpg');
//将图片裁剪为400x400并保存为corp.jpg
$image->crop(400, 400)->save('./crop.jpg');

生成的图片如图:

crop

支持从某个坐标开始裁剪,例如下面从(100,30)开始裁剪:

$image = new ThinkImage(); 
$image->open('./1.jpg');
//将图片裁剪为400x400并保存为corp.jpg
$image->crop(400, 400,100,30)->save('./crop.jpg');

生成的图片如图:

crop

生成缩略图

使用thumb方法生成缩略图

$image = new ThinkImage(); 
$image->open('./1.jpg');
// 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.jpg
$image->thumb(150, 150)->save('./thumb.jpg');

生成的缩略图如图所示:

thumb

我们看到实际生成的缩略图并不是150*150,因为默认采用原图等比例缩放的方式生成缩略图,最大宽度是150。

可以支持其他类型的缩略图生成,设置包括ThinkImage的下列常量或者对应的数字:

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 ThinkImage(); 
$image->open('./1.jpg');
// 生成一个居中裁剪为150*150的缩略图并保存为thumb.jpg
$image->thumb(150, 150,ThinkImage::IMAGE_THUMB_CENTER)->save('./thumb.jpg');

居中裁剪后生成的缩略图效果如图:

thumb

左上角剪裁

$image = new ThinkImage(); 
$image->open('./1.jpg');
// 生成一个左上角裁剪为150*150的缩略图并保存为thumb.jpg
$image->thumb(150, 150,ThinkImage::IMAGE_THUMB_NORTHWEST)->save('./thumb.jpg');

左上角裁剪后生成的缩略图效果如图:

thumb

缩放填充

$image = new ThinkImage(); 
$image->open('./1.jpg');
// 生成一个缩放后填充大小150*150的缩略图并保存为thumb.jpg
$image->thumb(150, 150,ThinkImage::IMAGE_THUMB_FILLED)->save('./thumb.jpg');

缩放填充后生成的缩略图效果如图:

thumb

固定大小

$image = new ThinkImage(); 
$image->open('./1.jpg');
// 生成一个固定大小为150*150的缩略图并保存为thumb.jpg
$image->thumb(150, 150,ThinkImage::IMAGE_THUMB_FIXED)->save('./thumb.jpg');

采用固定大小的缩略图可能会有所变形,生成的缩略图效果如图:

thumb

添加图片水印

$image = new ThinkImage(); 
$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方法的第二个参数表示水印的位置,可以传入下列ThinkImage类的常量或者对应的数字:

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 ThinkImage(); 
// 在图片左上角添加水印(水印文件位于./logo.png) 并保存为water.jpg
$image->open('./1.jpg')->water('./logo.png',ThinkImage::IMAGE_WATER_NORTHWEST)->save("water.jpg"); 

生成的图片效果如下:

water

还可以支持水印图片的透明度(0~100,默认值是80),例如:

$image = new ThinkImage(); 
// 在图片左上角添加水印(水印文件位于./logo.png) 水印图片的透明度为50 并保存为water.jpg
$image->open('./1.jpg')->water('./logo.png',ThinkImage::IMAGE_WATER_NORTHWEST,50)->save("water.jpg"); 

生成的效果如下:


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)