使用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. Mistakes Collection I

    Symbol =>'s meaning: what it used to be like => what it should be. 1) mistake array subscript: ...

  2. [CSP-S模拟测试]:影子(并查集+LCA)

    题目描述 一个人有很多的影子,新的旧的,他们不断消失重来.学者的影子在他苍白色的精神图景里成为了$n$个黑色的点,他们伸长的触手交叉形成了一颗黑色的树.假使每个影子点拥有一个权值$d_i$,黑色的树边 ...

  3. 提供 web前端、H5、html页面 技术服务

    如有前端页面的需求请在评论区留言  第一时间进行回复

  4. Java Freemarker生成word

    Java Freemarker生成word freeMaker 简介: FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代 ...

  5. 74、Salesforce的String的format方法

    String placehodler = 'Hello {0} , {1} is cool!'; List<String> fillers = new String[]{'Jason',' ...

  6. java中子类继承父类程序执行顺序

    java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...

  7. Oracle 用户概念与基本操作

    目录 目录 Oracle的用户 通过系统用户来登陆SQLPlus system和sys的区别 查看登陆的用户 启用和锁定一个用户 启用用户 锁定用户 创建用户 修改用户 删除用户 角色权限 常用的用户 ...

  8. Java并发编程教程

    Java是一种多线程编程语言,我们可以使用Java来开发多线程程序. 多线程程序包含两个或多个可同时运行的部分,每个部分可以同时处理不同的任务,从而能更好地利用可用资源,特别是当您的计算机有多个CPU ...

  9. 常用命令--mount

    mount -o remount,rw / mount 命令 [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点 -l   查询系统中已经挂载的设备,-l 会显示卷标 -a ...

  10. Optparse 简介

    optparse 这个库的主要作用是可以用为脚本提供传递命令参数功能 一个简单的例子 def main(): parser = OptionParser(usage = "usage: %p ...