Thinkphp图片水印和文字水印
1.Thinkphp图像处理
在TP框架中,我们经常用到图片上传,我最近写了很多关于图片上传的文章,thinkphp图片上传+validate表单验证+图片木马检测+缩略图生成等文章,今天写一下关于图片上传成功后给图片加水印文字或者加图片水印,
1.1图片处理类和库
首先,在Thinkphp\Think\Image类中有图像处理功能,支持Gd库和Imagick库,包括对GIf图像处理的支持。
1.2实例化类库
$image = new \Think\Image();
实例化image后,默认使用GD库进行图像操作,如果需要使用Imagick库操作的话,需要把实例化写成:
$image = new \Think\Image(\Think\Image::IMAGE_IMAGICK);
// 或者采用
$image = new \Think\Image('Imagick');
如果对GD库或者imageick库不了解,可以参考http://php.net/manual/zh/book.image.php,对GD库和imageick库有详细的讲解,而且是中文版的,特别通俗易懂!
1.3打开图片资源
如果我们要对图像进行处理,第一步,必须先打开图像资源:
使用open方法打开图像文件进行相关操作:
$image = new \Think\Image();
$image->open('./1.jpg'); //指向要打开的图片资源
在图片上传中,把open路径指向要打开的上传文件,然后进行对该图片的处理。
1.4获取图像信息
在open图像文件以后,我们要获取图像的信息:
$image = new \Think\Image();
$image->open($file);//路径指向你上传的图片
$width = $image->width(); // 返回图片的宽度
$height = $image->height(); // 返回图片的高度
$type = $image->type(); // 返回图片的类型
$mime = $image->mime(); // 返回图片的mime类型
$size = $image->size(); // 返回图片的尺寸数组 0 图片宽度 1 图片高度
这样我们可以获取图片的信息,接下里可以把图片的一些信息保存在数据库或者继续对图像进行处理。
1.5添加图片水印
接下来我们就可以对我们上传的图片添加水印
$image = new \Think\Image();
// 在图片左上角添加水印(水印文件位于./logo.png) 并保存为water.jpg
$image->open('./1.jpg')->water('./logo.png',\Think\Image::IMAGE_WATER_CENTER)->save("water.jpg");
如图,就是把logo.png水印到1.jpg的5(居中)的位置上

图片水印的位置,是根据下面的代码确定的,我们想吧图片水印在哪里,可以根据自己的需求改变
IMAGE_WATER_NORTHWEST = 1 ; //左上角水印
IMAGE_WATER_NORTH = 2 ; //上居中水印
IMAGE_WATER_NORTHEAST = 3 ; //右上角水印
IMAGE_WATER_WEST = 4 ; //左居中水印
IMAGE_WATER_CENTER = 5 ; //居中水印
IMAGE_WATER_EAST = 6 ; //右居中水印
IMAGE_WATER_SOUTHWEST = 7 ; //左下角水印
IMAGE_WATER_SOUTH = 8 ; //下居中水印
IMAGE_WATER_SOUTHEAST = 9 ; //右下角水印
还可以支持水印图片的透明度(0~100,默认值是80)
$image = new \Think\Image();
// 在图片左上角添加水印(水印文件位于./logo.png) 水印图片的透明度为50 并保存为water.jpg
$image->open('./1.jpg')->water('./logo.png',\Think\Image::IMAGE_WATER_NORTHWEST,80)->save("water.jpg");
1.6给图片添加文字水印
$image = new \Think\Image();
// 在图片右下角添加水印文字 ThinkPHP 并保存为new.jpg
$image->open('./1.jpg')->text('www.THZ.CN','./1.ttf',20,'#000000',\Think\Image::IMAGE_WATER_SOUTHEAST)->save("new.jpg");
参数详解:text('要水印的文字',字体,字体大小,字体颜色,'文字要水印的位置');
效果图:

在这里,制作的时候会出现水印文字乱码的问题:
解决方案:1.出现乱码或者出现框框,是因为你所选用字体的原因,有些字体不支持中文,当我们要水印中文的时候会出现乱码问题,这个时候,我们要去下载支持中文的字体,例如:微软雅黑,宋体……
2.大部分的字体都支持英文,所以我们水印的时候要尽量水印英文字母吧,这样不容易出错。
3.我们要想水印一些奇怪的字,比如韩语,日本语……,我们需要去下载对应的字体。
4.如果我们的字体只用于windows,我们可以到C:\Windows\Fonts中选取我们要用的字体(不是很推荐,我们要想用,去下载最新的字体,比较全面,而且支持生成的字比较多)。
Thinkphp图片水印和文字水印的更多相关文章
- java常用开发工具类之 图片水印,文字水印,缩放,补白工具类
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...
- 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)
javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...
- PHP给图片加上图片水印和文字水印实例
下面给大家分享一下PHP给图片加上图片水印和文字水印实例,这也是网站经常用到的功能,把代码加上去,调用就很简单了. 核心代码: function imageWaterMark($groundImage ...
- Java给图片和PDF文件添加水印(图片水印和文字水印)
有时候我们看到的图片或者PDF文件会自动加上水印.分为文字水印和图片水印. ----------------------------图片水印---------------------------- 1 ...
- 利用iTextSharp组件给PDF文档添加图片水印,文字水印
最近在做关于PDF文档添加水印的功能,折腾了好久,终于好了.以下做个记录: 首先会用到iTextSharp组件,大家可以去官网下载,同时我也会在本文中附加进来. 代码中添加引用为: using S ...
- java创建透明背景的PNG图片加自定义文字水印
人在码上走,需求天天有.这不,今天前端让我返回一个带自定义水印的背景图片.一通google,有现成的代码,但是基本是直接在源图上添加水印,生成出来的文字样式也没有控制好,看来又只有自己造轮子了. 过程 ...
- PHP 使用gd库给图片加图片水印,文字水印,并返回路径
//图片水印 $mark_filename = './02.jpg'; //获取图片信息 $info = getimagesize($mark_filename); //获取图片的后缀 $type = ...
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)
javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...
随机推荐
- 在浏览器输入网址,Enter之后发生的事情
简介: 1. 浏览器接收域名 2. 发送域名给DNS,中文名字是域名系统服务器,一般位于ISP(互联网服务提供商,比如我们熟知的联通.移动.电信等) 中.浏览器会首先发给离自己最近的DNS,DNS收到 ...
- Mybatis xml 写sql如何判断集合的size
在mybtis的映射文件中判断集合大小 list.size 例子如下: <if test="groupIds != null and groupIds.size>0" ...
- 【BZOJ3884】上帝与集合的正确用法 [欧拉定理]
上帝与集合的正确用法 Time Limit: 5 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Input 第一行一个T ...
- 【BZOJ2882】工艺 [SAM]
工艺 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 小敏和小燕是一对好朋友. 他们正在玩一 ...
- 【NOIP】提高组2012 同余方程
[算法]扩展欧几里德算法 [题解]学完扩欧就可以随便水了... 转化为不定方程ax-by=1. 因为1且题目保证有解,所以方程有唯一解. 紫书曰:同余方程的一个解其实指的是一个同余等价类. 所以满足x ...
- Android日历开发之右上角标注红点事件
1.效果如下所示: 2.方法: 前提:已经知道如何在右上角画圆点的情况下. 这是一个任务显示器,每个任务都有一个时间,比如2014.01.12. 如果要标注2016.08 ...
- macaca安装失败的解决办法!
https://github.com/macacajs/macaca-android https://www.jianshu.com/p/76a5be6c1036
- monkey测试===修改adb的默认端口
最近电脑上由于公司系统的原因,adb的端口被占用了,但是占用端口的进程是必须启动的,不能被杀死,在网上找了很多办法,大家都是说杀死占用端口的进程.这个方法并不适用我,所以在此给大家一个新的方法.新建一 ...
- monkey测试===Android测试工具Monkey用法简介(转载)
Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试.Monkey ...
- codevs 1038 一元三次方程求解 NOIP2001提高组
题目链接:http://codevs.cn/problem/1038/ 题解: 嗯,exm?才知道二分隶属搜索专题…… 对-100到100枚举,按照题目中的提示,当当fi*fi+1<0时,二分深 ...