ThinkPHP ^6图片操作进阶

news2024/9/26 1:16:08

图片裁剪、缩略、水印不再是TP框架系统内置的功能,需要安装。

 

目录

安装

图片处理

1.创建图片对象

2.获取图片属性

3.裁剪图像

4.生成缩略图

6.保存图像

7.水印


安装

使用composer在项目根目录打开命令行执行:

composer require topthink/think-image

过程如下:

查看composer.json

图片处理

1.创建图对象

$image = \think\Image::open('./uploads/1.jpg');

 图片对象属性

think\Image Object
(
    [im:protected] => Resource id #165
    [gif:protected] => 
    [info:protected] => Array
    (
        [width] => 1920
        [height] => 1080
        [type] => jpeg
        [mime] => image/jpeg
        )
)

2.获取图片属性

echo ' 宽度:';
echo $image->width();

echo ' 高度:';
echo $image->height();

echo ' 类型:';
echo $image->type();

echo ' 图片mime:';
echo $image->mime();

echo ' 图片大小:';
print_r($image->size());

3.裁剪图像

使用crop()方法可以裁剪图片,并使用save()方法保存到指定路径;

/**
 * 裁剪图像
 *
 * @param  integer $w      裁剪区域宽度
 * @param  integer $h      裁剪区域高度
 * @param  integer $x      裁剪区域x坐标
 * @param  integer $y      裁剪区域y坐标
 * @param  integer $width  图像保存宽度
 * @param  integer $height 图像保存高度
 *
 * @return $this
 */
public function crop($w, $h, $x = 0, $y = 0, $width = null, $height = null)


// 只设置宽高
$image->crop(400,400)->save('./uploads/crop1.png');


// 设置宽高和坐标
$image->crop(400,400, 200, 200)->save('./uploads/crop2.png');


// 设置宽高和坐标 并保持图片宽高

// 具体来说就是裁剪原图400*400,坐标200*200,并设置裁剪后的图片为500*500
$image->crop(400,400, 200, 200, 500, 500)->save('./uploads/crop3.png');

4.生成缩略图

使用thumb()方法,可以生成缩略图,配合save()把缩略图保存下来;

/**
 * 生成缩略图
 * @param  integer $width  缩略图最大宽度
 * @param  integer $height 缩略图最大高度
 * @param int      $type   缩略图裁剪类型
 * @return $this
 */
public function thumb($width, $height, $type = self::THUMB_SCALING)

例子:

$image->thumb(500,500)->save('./uploads/thumb6.png');

默认等比例类型裁剪

裁剪类型设置为第三个参数默认为:$type = self::THUMB_SCALING

而这个常量设定的定义如下:

const THUMB_SCALING = 1;   // 常量,标识缩略图等比例缩放类型

const THUMB_FILLED = 2;    // 常量,标识缩略图缩放后填充类型

const THUMB_CENTER = 3;    // 常量,标识缩略图居中裁剪类型

const THUMB_NORTHWEST = 4; // 常量,标识缩略图左上角裁剪类型

const THUMB_SOUTHEAST = 5; // 常量,标识缩略图右下角裁剪类型

const THUMB_FIXED = 6;     // 常量,标识缩略图固定处理类型

5.旋转

使用rotate()方法,可以旋转图片,默认是90度,参数可以设置

/**
 * 旋转图像
 * @param int $degrees 顺时针旋转的度数
 * @return $this
 */
public function rotate($degrees = 90)

例子:

$image->rotate()->save('./uploads/rotate1.png');

6.保存图像

save()方法可以配置的参数除了保存文件名的路径,还有以下几个:

/**
 * 保存图像
 * @param string      $pathname  图像保存路径名称
 * @param null|string $type      图像类型
 * @param int         $quality   图像质量
 * @param bool        $interlace 是否对JPEG类型图像设置隔行扫描
 * @return $this
 */
public function save($pathname, $type = null, $quality = 80, $interlace = true)

7.水印

 

图片水印

water()方法,给图片增加一个图片水印,默认位置为右下角,可看源码常量:

/**
 * 添加水印
 *
 * @param  string $source 水印图片路径
 * @param int     $locate 水印位置
 * @param int     $alpha  透明度
 * @return $this
 */
public function water($source, $locate = self::WATER_SOUTHEAST, $alpha = 100)

水印位置参数

const WATER_SOUTHEAST = 9;   // 右下角水印

const WATER_SOUTHWEST = 7;   // 左下角水印 

const WATER_NORTHWEST = 1;   // 左上角水印 

const WATER_NORTHEAST = 3;   // 右上角水印 

const WATER_CENTER = 5;      // 居中水印 

const WATER_SOUTH = 8;       // 下居中水印 

const WATER_EAST = 6;        // 右居中水印 

const WATER_NORTH = 2;       // 上居中水印 

const WATER_WEST = 4;        // 左居中水印 

$locate = [x,y];         // 自定义水印坐标 

例子:

$image->water('./uploads/mr.Yu.png', 9, 50)->save('./uploads/water1.png');

效果:

 

 

文字水印

text()方法,可以给图片增加一个文字水印。

需要字体文件,没有的先下载好

/**
 * 图像添加文字
 * @param  string  $text   添加的文字
 * @param  string  $font   字体路径
 * @param  integer $size   字号
 * @param  string  $color  文字颜色
 * @param int      $locate 文字写入位置
 * @param  integer $offset 文字相对当前位置的偏移量
 * @param  integer $angle  文字倾斜角度
 * @return $this
 * @throws ImageException
 */
public function text($text, $font, $size, $color = '#00000000',
    $locate = self::WATER_SOUTHEAST, $offset = 0, $angle = 0) {

需要注意第五个参数,位置类型如下:

const WATER_SOUTHEAST = 9;// 右下角文字

const WATER_SOUTHWEST = 7;// 左下角文字

const WATER_NORTHWEST = 1;// 左上角文字

const WATER_NORTHEAST = 3;// 右上角文字

const WATER_CENTER = 5;   // 居中文字

const WATER_SOUTH = 8;    // 下居中文字

const WATER_EAST = 6;     // 右居中文字

const WATER_NORTH = 2;    // 上居中文字

const WATER_WEST = 4;     // 左居中文字

$locate = [x, y];     // 自定义文字坐标

例子:

// 获取当前工作目录
// getcwd()


$image->text('Mr.Yu', getcwd().'/font/msyh.ttf', 10, '#ffffff', 7)
->save('./uploads/text1.png');

效果:

 

总结:

Think-image类封装的图片处理方法,可以很方便的对图片相应处理,节省自己摸索和验证时间。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Simulink 电机控制:单电阻三相电流重构算法仿真总结

目录 理论基础 仿真实现 硬件实现 总结 理论基础 参考Microchip AN1299 《PMSM 无传感器 FOC的单分流三相电流重构算法》,详细的理论可以参考这个文档,这里只简单总结一下。单电阻采样的核心就是要在一个周期内实现两相电流的采样并通过基尔霍夫定…

【UE4 制作自己的载具】3-载具蓝图实现(基本)

效果步骤新建一个蓝图,继承“WheeledVehicle(轮式载具)”命名为“Vehicle_BP”,双击打开该蓝图选中“Mesh(继承)”,然后在细节中,骨架网格体选择“Vehicle”添加一个弹簧臂和摄像机组…

Windows下mysql8.0.32安装配置方法图文教程

Windows下mysql8.0.31安装配置方法图文教程 1、下载可以到官网的地址下载即可 https://dev.mysql.com/downloads/file/?id516465 2、解压缩并重命名mysql-8.0.32-winx64为mysql 3、创建my.ini配置文件,创建data文件夹。 4、打开记事本另存为my.ini并且使用ANSI编…

23年了,GOPATH和go.mod 还在冲突!

现在 新配了 go环境 设置了GOROOT,GOPATH ,发现引用别的包会出问题。一直会报 package XX not in GOROOT (xxxx)我的目录:我的开发目录: /home/fate/go_projects/老样子,下面有 /home/fate/go_…

元宇宙与ChatGPT结合 一场颠覆式场景革命或将到来?

元宇宙和ChatGPT都是当前数字化领域中非常热门的技术和应用,两者之间也存在一定的关系,结合起来,可以为企业提供更加智能化、个性化的服务和支持,同时也可以拓展企业的市场和品牌影响力,提高企业的效率和创新能力。 元…

公司新来一00后说我不会自动化测试,3个问题直接给他问趴下...

今天我们公司刚入职一小伙,听说是00后,今天在办公室交流了一下,他问我会不会自动化测试,我直呼好家伙,直接问了他3个开展自动化测试问题....一问3不知.....还有待加强呀我们在制定自动化测试实施策略时,首先…

java servlet详解

一、Servlet实现方式 1、实现Servlet接口,接口中的方法必须全部实现。此种方式支持最大程度的自定义。 2、继承GenericServlet,service方法必须重写,其他方可根据需求,选择性重写。 使用此种方式,表示只在接收和响应…

作为通信人,你知道国内有哪些通信领域的博物馆吗?

众所周知,博物馆是收藏、展示和研究历史文物的地方。参观博物馆,既可以回顾历史往事,也可以学习知识。 那么,作为通信人,你知道国内有哪些通信领域的博物馆吗? 今天,就让小编给大家介绍介绍。█…

微鳄365,可私有化部署的企业管理软件,让数据更安全让管理更方便

编者按:本文分析了企业数字化转型中常遇到的一些困难,并进一步指出微鳄365一体化解决方案,可以帮助企业克服这些困难。关键词:免安装,免维护,成本低,数据安全,共享协作,个…

利用STM32的LR寄存器调试HardFault错误

R14 or LR(Link Register) HardFault调试的思路 先在出错误的地方打断点,让程序的状态固定下来;由于HardFault属于异常,所以出现HardFault后,LR的值一定是0xFFFFFFFx,这样就可以根据其值,判断程序进入这个…

C++学习记录——십일 string类模拟实现

这篇对于string类的实现会一步步来,从错误到正确,尽量展现可能会忽略掉的细节. 文章目录1、初始化列表2、拷贝构造函数和赋值函数3、循环输出,迭代器4、插入删除等5、流插入流提取6、其它接口1、初始化列表 先写下来这些代码 String.h #pra…

KDJB-802微机继电保护测试仪

一、产品概述 KDJB-802微机继电保护测试仪是在参照电力部颁发的《微机型继电保护试验装置技术条件(讨论稿)》的基础上,广泛听取用户意见,总结目前国内同类产品优缺点,充分使用现代新的的微电子技术和器件实现的一种新型小型化微机继电保护测…

Delphi RSA加解密

感谢、感谢、感谢大佬的分享,https://github.com/ZYHPRO/RSAEncryptAndDecode 目录 1. 前言 2. 准备工作 3. Demo注意事项说明 3.1 公钥、私钥文本格式 3.2 回车键的影响 3.3 中文加解密说明 4. 结语 1. 前言 最近工作上安排了一个项目,与工商银行之…

whistle+SwitchyOmega配置代理解决白名单跨越

文章目录whistleSwitchyOmega配置代理什么是whistle什么是SwitchyOmega示例:作用为什么不直接使用SwitchyOmega代理whistleSwitchyOmega配置代理 什么是whistle whistle主要用于查看、修改HTTP、HTTPS、Websocket的请求、响应,也可以作为HTTP代理服务器…

数据结构-考研难点代码突破(树型查找 - 红黑树(RBT)插入流程图,删除)

文章目录1. 红黑树的定义和性质红黑树的插入操作流程红黑树的删除(了解)1. 红黑树的定义和性质 红黑树查找与删除的效率和AVL树相同。 但是因为AVL树在插入或删除节点可能破坏AVL树结构,而重新调整树的开销大。所以引出了红黑树。 红黑树的…

内网渗透(五十二)之域控安全和跨域攻击-搭建和查看域信任关系

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

为什么你的客户不喜欢用你的知识库呢?

现在很多企业的知识库处于一个完全荒废的状态,极少顾客愿意去查询使用,有的客户甚至完全停止使用企业知识库,这到底是为什么呢?看过许多公司的知识库后,总结了几个知识库失败的原因,并且提出了几个解决方法…

flink sql 执行慢问题排查(flink jdbc where 条件没有下推数据库)

最近在使用 flink sql (jdbc)执行一个简单表同步,可是执行了半天都没有执行完,后面通过 jstack 找到了问题原因:where条件没有下推到数据库执行。 任务如下: create table mysql_a ( id1 string, id2 at…

vue路由跳转取消上个页面的请求

场景描述: ​ 项目中,有一个Steps 步骤条,包含三步审核, 当页面跳转时,不管当前处于第几步,都需要停止上个页面正在执行或还未执行的逻辑。 需求:当vue路由跳转时,取消执行上个页面…