使用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. 【leetcode】976. Largest Perimeter Triangle

    题目如下: Given an array A of positive lengths, return the largest perimeter of a triangle with non-zero ...

  2. SEM推广引流效果的因素有哪些呢?

    决定搜索引擎推广效果的基本就是流量,所引流过来的是有效流量还是无效流量,直接决定了推广的效果!那我们如何才能引流到最精准的流量把流量变现呢? 第一个就是关键词的匹配模式 "民营企业" ...

  3. Code First 延迟装入特性

    使用ORM框架,基本上都会添加“延迟装入”的特性支持,当使用Entity Framwork 的objectContext与DbContext操作数据时,默认都使用“延迟装入”,也就是当我们在应用程序里 ...

  4. 【Flutter学习】可滚动组件之SingleChildScrollView

    一,概述 SingleChildScrollView类似于Android中的ScrollView,它只能接收一个子Widget.定义如下: 二,构造函数 const SingleChildScroll ...

  5. Python每日一题 003

    将 002 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中. 代码 import pymysql import uuid def get_id(): for i in ra ...

  6. 根据一个经纬度坐标获取周边最近经纬。Java实现

    1.需求:指定一个经纬度坐标,如:(31.2121751783,121.4411213954).周围有一堆经纬度坐标,找出与它最近的那个. 2.实现思路:将给出经纬度看成原点(0,0).周围经纬度定位 ...

  7. [CSP-S模拟测试]:玄学题/c(数学)

    题目传送门(内部题40) 输入格式 第一行:两个正整数$n$.$m$. 输出格式 第一行:一个整数,代表式子的值. 样例 样例输入1: 4 5 样例输出1: 0样例输入2: 799 8278 样例输出 ...

  8. django中初学常犯错误之梳理

    一,关于setting设置,1,两个INSRALLEN_APPS,需要将新建的app添加进去 2,需要再setting将html的路径拼接起来 二,urls.py 设置,from app名 impor ...

  9. python 100day notes(2)

    python 100day notes(2) str str2 = 'abc123456' print(str1.endswith('!')) # True # 将字符串以指定的宽度居中并在两侧填充指 ...

  10. MySQL 计算中位数

    mysql中位数 奇数取中间的值,偶数取中间两个数的平均值 eg: 12345 中位数4 1234 中位数2.5 SELECT avg(t1.money) as median_val FROM ( S ...