• Thinkphp图片水印和文字水印


    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(居中)的位置上

       

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

    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('要水印的文字',字体,字体大小,字体颜色,'文字要水印的位置');

       效果图:

       

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

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

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

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

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

       

  • 相关阅读:
    JavaScript系列:《JavaScript高级程序设计》,chapter2, 在html中使用JavaScript
    Java系列:JVM指令详解(下)(zz)
    Java系列:JVM指令详解(上)(zz)
    Java系列:关于Java中的桥接方法
    REST: C#调用REST API (zz)
    Activiti系列:为什么Activiti 5.18 的REST的api总是返回404错误
    timeSeries db之:使用Metrics监控应用程序的性能 (zz)
    Java系列:国际化(zz)
    通过数据库方式访问excel 2007及其以后(xlsx)文件的连接字符串
    java系列:《java核心技术 卷1》学习笔记,chapter 11 调试技巧
  • 原文地址:https://www.cnblogs.com/jingmin/p/6421973.html
Copyright © 2020-2023  润新知