1.Thinkphp图像处理

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

  

  1.1图片处理类和库

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

  

  1.2实例化类库  

  1. $image = new \Think\Image();

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

  1. $image = new \Think\Image(\Think\Image::IMAGE_IMAGICK);
  2. // 或者采用
  3. $image = new \Think\Image('Imagick');

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

    1.3打开图片资源

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

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

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

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

   

   1.4获取图像信息

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

  1. $image = new \Think\Image();
  2. $image->open($file);//路径指向你上传的图片
  3. $width = $image->width(); // 返回图片的宽度
  4. $height = $image->height(); // 返回图片的高度
  5. $type = $image->type(); // 返回图片的类型
  6. $mime = $image->mime(); // 返回图片的mime类型
  7. $size = $image->size(); // 返回图片的尺寸数组 0 图片宽度 1 图片高度

    这样我们可以获取图片的信息,接下里可以把图片的一些信息保存在数据库或者继续对图像进行处理。

   1.5添加图片水印

  接下来我们就可以对我们上传的图片添加水印

  1. $image = new \Think\Image();
  2. // 在图片左上角添加水印(水印文件位于./logo.png) 并保存为water.jpg
  3. $image->open('./1.jpg')->water('./logo.png',\Think\Image::IMAGE_WATER_CENTER)->save("water.jpg");

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

   

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

  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 ; //右下角水印

    还可以支持水印图片的透明度(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,80)->save("water.jpg");

    1.6给图片添加文字水印

  1. $image = new \Think\Image();
  2. // 在图片右下角添加水印文字 ThinkPHP 并保存为new.jpg
  3. $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图片水印和文字水印的更多相关文章

  1. java常用开发工具类之 图片水印,文字水印,缩放,补白工具类

    import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

  2. javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...

  3. 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

    javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...

  4. PHP给图片加上图片水印和文字水印实例

    下面给大家分享一下PHP给图片加上图片水印和文字水印实例,这也是网站经常用到的功能,把代码加上去,调用就很简单了. 核心代码: function imageWaterMark($groundImage ...

  5. Java给图片和PDF文件添加水印(图片水印和文字水印)

    有时候我们看到的图片或者PDF文件会自动加上水印.分为文字水印和图片水印. ----------------------------图片水印---------------------------- 1 ...

  6. 利用iTextSharp组件给PDF文档添加图片水印,文字水印

    最近在做关于PDF文档添加水印的功能,折腾了好久,终于好了.以下做个记录: 首先会用到iTextSharp组件,大家可以去官网下载,同时我也会在本文中附加进来. 代码中添加引用为:   using S ...

  7. java创建透明背景的PNG图片加自定义文字水印

    人在码上走,需求天天有.这不,今天前端让我返回一个带自定义水印的背景图片.一通google,有现成的代码,但是基本是直接在源图上添加水印,生成出来的文字样式也没有控制好,看来又只有自己造轮子了. 过程 ...

  8. PHP 使用gd库给图片加图片水印,文字水印,并返回路径

    //图片水印 $mark_filename = './02.jpg'; //获取图片信息 $info = getimagesize($mark_filename); //获取图片的后缀 $type = ...

  9. javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

随机推荐

  1. mybatis中association和collection的column传入多个参数值

    在使用 association和collection 进行关联查询的时候 column 参数可能会有多个,如下: 注意: parameterType 一定要是 java.util.Map

  2. svn: Checksum mismatch while updating 错误

    最近使用svn客户端更新代码的时候出现 Checksum mismatch while updating 的错误 解决办法 在出错文件的目录下,用update to reversion , 先选onl ...

  3. PHP系统编程--01.多进程与多线程

    PHP中提供了一个扩展pcntl,可以利用操作系统的fork调用来实现多进程.fork调用后执行的代码将是并行的. PHP官方没有提供多线程的扩展,pecl中有一个pthreads扩展提供了多线程的特 ...

  4. Item 5 避免创建不必要的对象

    场景一: 这个是经常出现的问题,因为我们经常误用String. public class Test { public static void main(String[] args) { //参数&qu ...

  5. 【BZOJ1221】【HNOI2001】软件开发 [费用流]

    软件开发 Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Description 某软件公司正在规划一项n天的软件开 ...

  6. css纯样式导航

    <style>.dropdown {    position: relative;    display: inline-block;} .dropdown-content {    di ...

  7. 关于this问题

    对于关键字this,其实很好理解,谁调用我就指向谁.下面举个例子说明: 其实这也是在学习闭包中的一个案例: var name = "The window"; var obj = { ...

  8. pcap的安装

    pcap,即 packet capture library 抓包库,这个抓包库给抓包系统提供了一个高层次的接口.所有网络上的数据包,甚至是那些发送给其他主机的,通过这种机制,都是可以捕获的.它也支持把 ...

  9. Ubuntu中启用关闭Network-manager网络设置问题! 【Server版本】

    在UbuntuServer版本中,因为只存有命令行模式,所以要想进行网络参数设置,只能通过修改/etc/network/interfaces.具体设置方法如下: (1) UbuntuServer 修改 ...

  10. 【bzoj1798】【AHOI2009】维护序列

    练一下线段树模板,区间乘法. #include<bits/stdc++.h> #define lson (o<<1) #define rson (o<<1|1) ; ...