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

实例化类库

  1. $image = new \Think\Image();

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

  1. $image = new \Think\Image(\Think\Image::IMAGE_IMAGICK);
  2. // 或者采用
  3. $image = new \Think\Image('Imagick');

图像操作

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

打开图像文件

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

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

  1. $image = new \Think\Image();
  2. $image->open('./1.jpg');

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

  1. $image = new \Think\Image(\Think\Image::IMAGE_GD,'./1.jpg'); // GD库
  2. // 或者
  3. $image = new \Think\Image(\Think\Image::IMAGE_IMAGICK,'./1.jpg'); // imagick库

获取图像信息

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

  1. $image = new \Think\Image();
  2. $image->open('./1.jpg');
  3. $width = $image->width(); // 返回图片的宽度
  4. $height = $image->height(); // 返回图片的高度
  5. $type = $image->type(); // 返回图片的类型
  6. $mime = $image->mime(); // 返回图片的mime类型
  7. $size = $image->size(); // 返回图片的尺寸数组 0 图片宽度 1 图片高度

裁剪图片

使用crop和save方法完成裁剪图片功能。

  1. $image = new \Think\Image();
  2. $image->open('./1.jpg');
  3. //将图片裁剪为400x400并保存为corp.jpg
  4. $image->crop(400, 400)->save('./crop.jpg');

生成的图片如图:

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

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

生成的图片如图:

生成缩略图

使用thumb方法生成缩略图

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

生成的缩略图如图所示:

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

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

  1. IMAGE_THUMB_SCALE = 1 ; //等比例缩放类型
  2. IMAGE_THUMB_FILLED = 2 ; //缩放后填充类型
  3. IMAGE_THUMB_CENTER = 3 ; //居中裁剪类型
  4. IMAGE_THUMB_NORTHWEST = 4 ; //左上角裁剪类型
  5. IMAGE_THUMB_SOUTHEAST = 5 ; //右下角裁剪类型
  6. IMAGE_THUMB_FIXED = 6 ; //固定尺寸缩放类型

例如:

居中裁剪

  1. $image = new \Think\Image();
  2. $image->open('./1.jpg');
  3. // 生成一个居中裁剪为150*150的缩略图并保存为thumb.jpg
  4. $image->thumb(150, 150,\Think\Image::IMAGE_THUMB_CENTER)->save('./thumb.jpg');

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

左上角剪裁

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

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

缩放填充个转广州大理石平台

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

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

固定大小

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

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

添加图片水印

  1. $image = new \Think\Image();
  2. $image->open('./1.jpg');
  3. //将图片裁剪为440x440并保存为corp.jpg
  4. $image->crop(440, 440)->save('./crop.jpg');
  5. // 给裁剪后的图片添加图片水印(水印文件位于./logo.png),位置为右下角,保存为water.gif
  6. $image->water('./logo.png')->save("water.gif");
  7. // 给原图添加水印并保存为water_o.gif(需要重新打开原图)
  8. $image->open('./1.jpg')->water('./logo.png')->save("water_o.gif");

water方法的第二个参数表示水印的位置,可以传入下列Think\Imag类的常量或者对应的数字:

  1. IMAGE_WATER_NORTHWEST = 1 ; //左上角水印
  2. IMAGE_WATER_NORTH = 2 ; //上居中水印
  3. IMAGE_WATER_NORTHEAST = 3 ; //右上角水印
  4. IMAGE_WATER_WEST = 4 ; //左居中水印
  5. IMAGE_WATER_CENTER = 5 ; //居中水印
  6. IMAGE_WATER_EAST = 6 ; //右居中水印
  7. IMAGE_WATER_SOUTHWEST = 7 ; //左下角水印
  8. IMAGE_WATER_SOUTH = 8 ; //下居中水印
  9. IMAGE_WATER_SOUTHEAST = 9 ; //右下角水印

例如:

  1. $image = new \Think\Image();
  2. // 在图片左上角添加水印(水印文件位于./logo.png) 并保存为water.jpg
  3. $image->open('./1.jpg')->water('./logo.png',\Think\Image::IMAGE_WATER_NORTHWEST)->save("water.jpg");

生成的图片效果如下:

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

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

生成的效果如下:

也可以支持给图片添加文字水印(假设在入口文件的同级目录下存在1.ttf字体文件),例如:

  1. $image = new \Think\Image();
  2. // 在图片右下角添加水印文字 ThinkPHP 并保存为new.jpg
  3. $image->open('./1.jpg')->text('ThinkPHP','./1.ttf',20,'#000000',\Think\Image::IMAGE_WATER_SOUTHEAST)->save("new.jpg");
复制代码

 

生成的图片效果:

thinkphp 图形处理的更多相关文章

  1. MAC MAMP 中安装配置使用 ThinkPHP

    MAMP PRO 是Mac OS X 平台上经典的本地环境应用 MAMP 的专业版.专门为专业的Web开发人员和程序员轻松地安装和管理自己的开发环境. MAMP这几个首字母代表Mac OS X系统上的 ...

  2. thinkphp实现功能:验证码

    1.定义验证码函数 public function verify(){ /** * 在thinkPHP中如何实现验证码 * * ThinkPHP已经为我们提供了图像处理的类库ThinkPHP\Exte ...

  3. 制作类似ThinkPHP框架中的PATHINFO模式功能

    一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...

  4. 在 SAE 上部署 ThinkPHP 5.0 RC4

    缘起 SAE 和其他的平台有些不同,不能在服务器上运行 Composer 来安装各种包,必须把源码都提交上去.一般的做法,可能是直接把源码的所有文件复制到目录中,添加到版本库.不过,这样就失去了与上游 ...

  5. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

  6. ThinkPHP 模板substr的截取字符串函数

    ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...

  7. thinkphp数据的查询和截取

    public function NewsList(){ $this->assign('title','news'); $p = I('page',1); $listRows = 6; $News ...

  8. [转]thinkphp 模板显示display和assign的用法

    thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...

  9. [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别

    1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...

随机推荐

  1. DMA实验总结

    一.RCC设置 没什么好写的之前USART的基本一样 /************************************************************************ ...

  2. Codeforces 789e The Great Mixing (bitset dp 数学)

    Sasha and Kolya decided to get drunk with Coke, again. This time they have k types of Coke. i-th typ ...

  3. 前端每日实战:58# 视频演示如何用纯 CSS 创作一只卡通鹦鹉

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/vrRmWy 可交互视频 此视频是可 ...

  4. strcpy函数学习

    strcpy的功能如下: 原型声明:char *strcpy(char* dest, const char *src); 头文件:#include <string.h> 和 #includ ...

  5. 使用js在页面上新建文件夹

    使用js在页面上新建文件夹 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  6. [转]DrawPrimitive 详解Direct3DDevice8

    Direct3DDevice8 函数 05-39  DrawPrimitive 详解 费了好大的劲,终于搞清楚 DirectX 3D 三维图像中 DrawPrimitive 的用法(自嘲:未必). D ...

  7. 33. 构建第一个job

    1.点击 New Item 2.Enter an item name 输入一个name,点击Freestyle project 3.我们可以输入一个描述,点击Advanced 4.勾选Use cust ...

  8. 27. Unittest单元测试框架的介绍与使用

    unittest单元测试框架 先贴一下unittest官网地址.unittest文档开头介绍了四个重要的概念:test fixture,test case, test suite, test runn ...

  9. Linux(三)—— 项目部署环境搭建

    目录 项目部署环境搭建 一.linux上网 二.rpm包管理 1.光盘挂载 2.安装卸载rpm包 3.查询是否安装 4.查看软件包 5.互相依赖关系的软件包 三.yum包管理 1.使用aliyun的y ...

  10. 调用WPF程序时传入参数

    http://blog.csdn.net/martin_cheng/article/details/41351013 http://blog.csdn.net/libby1984/article/de ...