PHP开发的文字水印,缩略图,图片水印实现类与用法示例


Posted in PHP onApril 12, 2019

本文实例讲述了PHP开发的文字水印,缩略图,图片水印实现类与用法。分享给大家供大家参考,具体如下:

1.实现类ImageToTest.class.php参考代码

class ImageToTest {
  /**
   * 图片的基本信息
   */
  private $info;
  private $image;
  public function __construct($src){
    $info = getimagesize($src);
    $this->info = array(
      'width'=> $info[0],
      'height'=> $info[1],
      'type'=> image_type_to_extension($info[2],false),
      'mime'=>$info['mime']
    );
    $fun = "imagecreatefrom{$this->info['type']}";
    $this->image = $fun($src);
  }
  /**
   * 操作图片 (压缩)
   */
  public function thumb($width,$height){
    $image_thumb = imagecreatetruecolor($width,$height);
    imagecopyresampled($image_thumb,$this->image,0,0,0,0,$width,$height,
      $this->info['width'],$this->info['height']);
    imagedestroy($this->image);
    $this->image = $image_thumb;
  }
  /**
   * 操作图片(添加文字水印)
   */
  public function fontMark($content,$font_url,$size,$color,$local,$angle){
    $col = imagecolorallocatealpha($this->image,$color[0],$color[1],$color[2],$color[3]);
    imagettftext($this->image,$size,$angle,$local['x'],$local['y'],$col,$font_url,$content);
  }
  /**
   * 操作图片(添加水印图片)
   */
  public function imageMark($source,$local,$alpha){
    //1.获取水印图片的基本信息
    $info2 = getimagesize($source);
    //2.通过水印的图片编号来获取水印的图片类型
    $type2 = image_type_to_extension($info2[2],false);
    //3.在内存中创建一个和我们的水印图像一致的图像类型
    $func2 = "imagecreatefrom{$type2}";
    //4.把水印图片复制到内存中
    $water = $func2($source);
    //5.合并图片
    imagecopymerge($this->image,$water,$local['x'],$local['y'],0,0,$info2[0],$info2[1],$alpha);
    //6.销毁水印图片
    imagedestroy($water);
  }
  /**
   * 在浏览器中输出图片
   */
  public function show(){
    header("Content-type:".$this->info['mime']);
    $funs = "image{$this->info['type']}";
    $funs($this->image);
  }
  /**
   * 把图片保存到硬盘里
   */
  public function save($newName){
    $funs = "image{$this->info['type']}";
    $funs($this->image,'./outPut/'.$newName.'.'.$this->info['type']);
  }
  /**
   * 销毁图片 使用析构函数
   */
  public function __destruct()
  {
    imagedestroy($this->image);
  }
}

2.测试参考代码

require_once('ImageToTest.class.php');
/*$src = './image/wbg.jpg';
$image = new ImageToTest($src);
$image->thumb(700,550);
$image->show();*/
/*$src2 = './image/wbg.jpg';
$content = 'SGC';
$font_url = './image/YGYcuhei.ttf';
$size = 33;
$color = array(
  0=>2,
  1=>222,
  2=>222,
  3=>60
);
$local = array(
  'x'=>20,
  'y'=>100
);
$angle = 10;
$image2 = new ImageToTest($src2);
$image2->fontMark($content,$font_url,$size,$color,$local,$angle);
$image2->show();
$image2->save('hahahah');*/
$src3 = './image/wbg.jpg';
$source = './image/water.jpg';
$local = array(
  'x'=>20,
  'y'=>100
);
$font_url = './image/YGYcuhei.ttf';
$size = 38;
$color = array(
  0=>2,
  1=>222,
  2=>222,
  3=>60
);
$alpha = 60;
$angle = 50;
$image3 = new ImageToTest($src3);
$image3->imageMark($source,$local,$alpha);
$image3->thumb(700,550);
$image3->fontMark('Hello',$font_url,$size,$color,$local,$angle);
$image3->show();
$image3->save('WAWAWAWAWA');

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用Zend Encode编写开发PHP程序
Oct 09 PHP
php 模拟POST|GET操作实现代码
Jul 20 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
May 05 PHP
JavaScript与HTML结合的基本使用方法整理
Oct 12 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
Dec 24 PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 PHP
PHP获取文件扩展名的方法实例总结
Jun 10 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
PHP设计模式概论【概念、分类、原则等】
May 01 PHP
详解PHP素材图片上传、下载功能
Apr 12 #PHP
laravel 事件/监听器实例代码
Apr 12 #PHP
Laravel5.7 数据库操作迁移的实现方法
Apr 12 #PHP
laravel使用Faker数据填充的实现方法
Apr 12 #PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 #PHP
laravel 数据迁移与 Eloquent ORM的实现方法
Apr 12 #PHP
PHP中的Iterator迭代对象属性详解
Apr 12 #PHP
You might like
php列出mysql表所有行和列的方法
2015/03/13 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
php二维码生成以及下载实现
2017/09/28 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
基于jquery的跨域调用文件
2010/11/19 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
js中生成map对象的方法
2014/01/09 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
Js面试算法详解
2018/04/08 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
Python中的元组介绍
2019/01/28 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
Prototype如何更新局部页面
2013/03/03 面试题
个性大学生自我评价
2013/12/04 职场文书
田径运动会开幕式及主持词
2014/03/28 职场文书
法人授权委托书格式
2014/04/08 职场文书
团日活动总结范文
2014/04/25 职场文书
土木工程求职信
2014/05/29 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
2014年统战工作总结
2014/12/09 职场文书
入党转正申请书范文
2019/05/20 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python