Thinkphp图片水印和文字水印

摘要:
1.Thinkphp图像处理在TP框架中,我们经常使用图像上传。我最近写了很多关于图像上传的文章,包括thinkphp图像上传+验证表单验证+图像木马检测+缩略图生成。今天,我写的是在成功上传图像后向图像添加水印文本或图像水印。1.1图像处理类和库首先,ThinkphpThinkImage类中有图像处理功能,支持Gd库和Imagick库,包括GIf图像处理。

1.Thinkphp图像处理

  在TP框架中,我们经常用到图片上传,我最近写了很多关于图片上传的文章,thinkphp图片上传+validate表单验证+图片木马检测+缩略图生成等文章,今天写一下关于图片上传成功后给图片加水印文字或者加图片水印,

  

  1.1图片处理类和库

  首先,在ThinkphpThinkImage类中有图像处理功能,支持Gd库和Imagick库,包括对GIf图像处理的支持。

  

  1.2实例化类库  

$image = new ThinkImage(); 

    实例化image后,默认使用GD库进行图像操作,如果需要使用Imagick库操作的话,需要把实例化写成:

$image = new ThinkImage(ThinkImage::IMAGE_IMAGICK); 
// 或者采用
$image = new ThinkImage('Imagick');

    如果对GD库或者imageick库不了解,可以参考http://php.net/manual/zh/book.image.php,对GD库和imageick库有详细的讲解,而且是中文版的,特别通俗易懂!

    1.3打开图片资源

  如果我们要对图像进行处理,第一步,必须先打开图像资源:

    使用open方法打开图像文件进行相关操作:

$image = new ThinkImage(); 
$image->open('./1.jpg');        //指向要打开的图片资源

    在图片上传中,把open路径指向要打开的上传文件,然后进行对该图片的处理。

   

   1.4获取图像信息

  在open图像文件以后,我们要获取图像的信息:

$image = new ThinkImage(); 
$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 ThinkImage(); 
// 在图片左上角添加水印(水印文件位于./logo.png) 并保存为water.jpg
$image->open('./1.jpg')->water('./logo.png',ThinkImage::IMAGE_WATER_CENTER)->save("water.jpg");

    如图,就是把logo.png水印到1.jpg的5(居中)的位置上

   Thinkphp图片水印和文字水印第1张

    图片水印的位置,是根据下面的代码确定的,我们想吧图片水印在哪里,可以根据自己的需求改变

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 ThinkImage(); 
// 在图片左上角添加水印(水印文件位于./logo.png) 水印图片的透明度为50 并保存为water.jpg
$image->open('./1.jpg')->water('./logo.png',ThinkImage::IMAGE_WATER_NORTHWEST,80)->save("water.jpg"); 

    1.6给图片添加文字水印

$image = new ThinkImage(); 
// 在图片右下角添加水印文字 ThinkPHP 并保存为new.jpg
$image->open('./1.jpg')->text('www.THZ.CN','./1.ttf',20,'#000000',ThinkImage::IMAGE_WATER_SOUTHEAST)->save("new.jpg"); 

   参数详解:text('要水印的文字',字体,字体大小,字体颜色,'文字要水印的位置');

   效果图:

   Thinkphp图片水印和文字水印第2张

    在这里,制作的时候会出现水印文字乱码的问题:

    解决方案:1.出现乱码或者出现框框,是因为你所选用字体的原因,有些字体不支持中文,当我们要水印中文的时候会出现乱码问题,这个时候,我们要去下载支持中文的字体,例如:微软雅黑,宋体……

    2.大部分的字体都支持英文,所以我们水印的时候要尽量水印英文字母吧,这样不容易出错。

    3.我们要想水印一些奇怪的字,比如韩语,日本语……,我们需要去下载对应的字体。

    4.如果我们的字体只用于windows,我们可以到C:WindowsFonts中选取我们要用的字体(不是很推荐,我们要想用,去下载最新的字体,比较全面,而且支持生成的字比较多)。

   

免责声明:文章转载自《Thinkphp图片水印和文字水印》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HTML5 video autoplay="autoplay" 无法自动播放的问题Spring框架第一天(搭建项目)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何在Web页面里面使用高拍仪扫描上传图像

问题: 在网页上,客户端访问的时候,可以扫描图象(通过扫描仪),并放到网页上,上传到服务器,如何实现?就是提供扫描仪的驱动程序,并使用扫描仪来扫描图象 ,有没有此类的ActiveX控件   回复: 目前大多数扫描仪都提供了ActiveX控件,在网页中可以直接集成使用。这些控件支持扫描并将扫描的图片保存到本地目录。并且提供了扫描事件,在事件中可以得到扫描后的...

vant upload图片上传 (file文件)

     <div class="upload-img">   <div v-for="(item,index) in uploadImages" :key="index">     <img :src="http://t.zoukankan.com/item">   </div>   <!--...

微信小程序上传图片 并和文字一起提交 (有接口)

实现功能如图 html代码 <viewclass="main"> <viewclass="card"> <viewclass="card-up"> <view>身份证</view> <view>上传身份证</view> </view> <image...

微信小程序基于腾讯云对象存储的图片上传

在使用腾讯云对象存储之前,公司一直使用的是传统的FTP的上传模式,而随着用户量的不断增加,FTP所暴露出来的问题也越来越多,1.传输效率低,上传速度慢。2.时常有上传其他文件来攻击服务器,安全上得不到保障。所以我们在经过慎重考虑觉得使用第三方的云存储服务。 在最开始的时候我们在腾讯云与阿里云中选择,最终我们选择腾讯云,腾讯云在文件上传用时方面的性能比较突出...

图片上传JS插件梳理与学习

项目的oper端和seller端,用了两个不同插件,简单了解一下: 一、seller端:AjaxUpload.js seller端使用的是 AjaxUpload.js ,封装好的一个库。调用时传入参数,配置相关属性即可。 1、使用步骤 引入JS文件; JS代码构建对象,传入对应参数;同时JS中的方法可以进行图片上传之前之后的处理; 后台:实现图片上传同时...

C#--web中上传图片与浏览

FileUpload控件: 属性: FileName:文件名 HasFile:bool 是否选中了文件 FileBytes:要上传文件的二进制数据 方法: SaveAs(string 绝对路径):上传,另存为。 一、上传到硬盘文件夹(一)传单个文件 第一步:准备好文件及路径: //把之前在客户端的文件名给取出来 string fileName = File...