使用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. MyBatis注解开发-@Insert和@InsertProvider(@Select、@SelectProvider雷同)

    @Insert和@InsertProvider都是用来在实体类的Mapper类里注解保存方法的SQL语句.不同的是,@Insert是直接配置SQL语句,而@InsertProvider则是通过SQL工 ...

  2. Anaconda/Conda创建环境时报错的解决方案

    按照Conda网站上的提示安装完Conda之后,想要用conda create创建环境,一直报错: ERROR conda.core.link:_execute_actions(337): An er ...

  3. 【InnoDB】缓冲池

    索引目录 INNODB的体系结构 缓冲池 缓存中页的定位: checkpoint技术 INNODB的关键特性 插入缓冲 change buffer 两次写 以下的资料总结自:官方文档和<MySQ ...

  4. 第六周-Scrum Meeting

    第一部分ScrumMeeting 每个人的工作: 成员 任务 ISSUE链接 本周已完成的工作 本周计划完成的工作 工作中遇到的困难 李卓峻 负责商品信息页面的界面设计与功能实现 https://gi ...

  5. webpack+vue+koa+mongoDB,从零开始搭建一个网站

    github 地址 https://github.com/wangxiaoxi... webpakc+vue的搭建1.新建项目文件夹(see-films);2.npm init //初始化项目3.搭建 ...

  6. css 布局(圣杯、双飞翼)

    一. 圣杯布局. 左右固宽,中间自适应 三列布局,中间宽度自适应,两边定宽: 中间部分要在浏览器中优先展示渲染: 具体步骤:1.设置基本样式2.圣杯布局是一种相对布局,首先设置父元素container ...

  7. Linux常用命令的使用方法

    Linux 命令大全 Linux 命令大全 1.文件管理 cat chattr chgrp chmod chown cksum cmp diff diffstat file find git gitv ...

  8. linux kafka进程挂了 自动重启

    使用crontab,定时监控 kafka进程,发现挂了后重启. shell脚本如下: #!/bin/sh source /etc/profile proc_dir="/data/kafka& ...

  9. 文件上传&&验证文件格式

    $(function(){ $(".layui-progress").hide(); $("[data-upload-file]").each(function ...

  10. browser-sync浏览器同步刷新工具

    > https://browsersync.io1. 安装browser-sync2. 切换到相应的目录,要监视的文件目录3. 启动browser-sync监视css文件: `browser-s ...