php实现常见图片格式的水印和缩略图制作(面向对象)


Posted in PHP onJune 15, 2016

本文实例为大家分享了php水印和缩略图制作代码,使用面向对象的方法来实现常见图片格式jpg,png,gif的水印和缩略图的制作,供大家参考,具体内容如下

<?php
header('Content-Type:text/html;charset=utf-8');
/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
//给图片添加水印
Class Water{
 //开启水印
 private $watermark_on = '1';
  
 public $water_img;
  
 //水印位置
 public $pos = 1; 
  
 //压缩比
 public $pct = 80;
  
 //透明度
 public $quality = 80;
  
 public $text = '乐趣网zlblog.sinaapp.com';
  
 public $size = 12;
  
 public $color = '#000000';
  
 public $font = 'font.ttf';
  
 //thumb的制作
 //默认缩略图功能开启
 private $thumb_on = 1;
 //生成缩略图的方式
 public $thumb_type = 1;
 //生成缩略图的宽度
 public $thumb_width;
 //生成缩略图的高度
 public $thumb_height;
 //生成缩略图的后缀名
 public $thumb_fix = '_dq';
 
 //缩略图函数处理
 public function thumb( $img,$outfile='',$t_type='',$t_w='',$t_h='' ){
  //验证图片是否符合要求
  if(!$this->check($img) || !$this->thumb_on) return FALSE;
   
  //定义缩略图的初始值
  $t_type = $t_type ? $t_type : $this->thumb_type;
  $t_w = $t_w ? $t_w : $this->thumb_width;
  $t_h = $t_h ? $t_h : $this->thumb_height;
   
  //获取到原图的信息
  $img_info = getimagesize($img);
  $img_w = $img_info[0];
  $img_h = $img_info[1];
  //取得图像类型的文件后缀
  $img_type = image_type_to_extension($img_info[2]);
  //获取到相关尺寸
  $thumb_size = $this->thumb_size($img_w,$img_h,$t_w,$t_h,$t_type);
  //确定原始图像类型
  //利用自定义函数来实现图片类型的确定
  $func = "imagecreatefrom".substr($img_type, 1);
  $res_img = $func($img);
   
  //缩略图资源   编辑图片资源moon
  if( $img_type == '.gif' || $img_type == '.png' ){
   $res_thumb = imagecreate($thumb_size[0], $thumb_size[1]);
   $color = imagecolorallocate($res_thumb, 255, 0, 0);
  }else{
   $res_thumb = imagecreatetruecolor($thumb_size[0], $thumb_size[1]);
  }
   
  //制作缩略图
  if(function_exists( "imagecopyresampled" ) ){
   imagecopyresampled($res_thumb, $res_img, 0, 0, 0, 0, $thumb_size[0],$thumb_size[1],$thumb_size[2],$thumb_size[3]);
  }else{
   imagecopyresized($res_thumb, $res_img, 0, 0, 0, 0, $thumb_size[0],$thumb_size[1],$thumb_size[2],$thumb_size[3]);
  }
  //处理透明色
  if( $img_type =='.gif' || $img_type == '.png' ){
   imagecolortransparent($res_thumb,$color);
  }
   
  //配置输出文件名
  $outfile = $outfile ? $outfile : $outfile.substr($img,0,strripos($img,'.')).$this->thumb_fix.$img_type;
   
  //文件的保存输出
  $func = "image".substr($img_type, 1);
  $func($res_thumb,$outfile);
  if(isset($res_thumb)) imagedestroy ($res_thumb);
  if(isset($res_img)) imagedestroy ($res_img);
  return $outfile;
 } 
 
 public function watermark( $img,$pos='',$out_img='',$water_img='',$text='' ){
  if(!$this->check($img) || !$this->watermark_on) return false;
   
  $water_img = $water_img ? $water_img : $this->water_img;
  //水印的开启状态
  $waterimg_on = $this->check($water_img) ? 1 : 0;
  //判断是否在原图上操作
  $out_img = $out_img ? $out_img : $img;
  //判断水印的位置
  $pos = $pos ? $pos : $this->pos;
  //水印文字
  $text = $text ? $text : $this->text;
   
   
  $img_info = getimagesize($img);
  $img_w = $img_info[0];
  $img_h = $img_info[1];
  //判断水印图片的类型
   
   
  if( $waterimg_on ){
   $w_info = getimagesize($water_img);
   $w_w = $w_info[0];
   $w_h = $w_info[1];
   if ( $img_w < $w_w || $img_h < $w_h ) return false;
   switch ( $w_info[2] ){
    case 1:
     $w_img = imagecreatefromgif($water_img);
     break;
    case 2:
     $w_img = imagecreatefromjpeg($water_img);
     break;
    case 3:
     $w_img = imagecreatefrompng($water_img);
     break;
   }
  }else{
   if( empty($text) || strlen($this->color)!=7 ) return FALSE;
   $text_info = imagettfbbox($this->size, 0, $this->font, $text);
   $w_w = $text_info[2] - $text_info[6];
   $w_h = $text_info[3] - $text_info[7];
  }
   
  //建立原图资源
   
  switch ( $img_info[2] ){
   case 1:
    $res_img = imagecreatefromgif($img);
    break;
   case 2:
    $res_img = imagecreatefromjpeg($img);
    break;
   case 3:
    $res_img = imagecreatefrompng($img);
    break;
  }
  //确定水印的位置
  switch ( $pos ){
   case 1:
    $x = $y =25;
    break;
   case 2:
    $x = ($img_w - $w_w)/2; 
    $y = 25;
    break;
   case 3:
    $x = $img_w - $w_w;
    $y = 25;
    break;
   case 4:
    $x = 25;
    $y = ($img_h - $w_h)/2;
    break;
   case 5:
    $x = ($img_w - $w_w)/2; 
    $y = ($img_h - $w_h)/2;
    break;
   case 6:
    $x = $img_w - $w_w;
    $y = ($img_h - $w_h)/2;
    break;
   case 7:
    $x = 25;
    $y = $img_h - $w_h;
    break;
   case 8:
    $x = ($img_w - $w_w)/2;
    $y = $img_h - $w_h;
    break;
   case 9:
    $x = $img_w - $w_w;
    $y = $img_h - $w_h;
    break;
   default :
    $x = mt_rand(25, $img_w - $w_w);
    $y = mt_rand(25, $img_h - $w_h);
  }
   
  //写入图片资源
  if( $waterimg_on ){
   imagecopymerge($res_img, $w_img, $x, $y, 0, 0, $w_w, $w_h, $this->pct); 
 }else{
  $r = hexdec(substr($this->color, 1,2));
  $g = hexdec(substr($this->color, 3,2));
  $b = hexdec(substr($this->color, 5,2));
  $color = imagecolorallocate($res_img, $r, $g, $b);
  imagettftext($res_img, $this->size, 0, $x, $y, $color, $this->font, $text); 
 }
  
 //生成图片类型
 switch ( $img_info[2] ){
  case 1:
   imagecreatefromgif($res_img,$out_img);
   break;
  case 2:
   //imagecreatefromjpeg($res_img,$out_img);
   imagejpeg($res_img,$out_img);
   break;
  case 3:
   imagepng($res_img,$out_img);
   break;
 }
 if(isset($res_img)) imagedestroy ($res_img);
 if(isset($w_img)) imagedestroy($w_img);
 return TRUE;
} 
 //验证图片是否存在
  private function check($img){
   $type = array('.jpg','.jpeg','.png','.gif');
   $img_type = strtolower(strrchr($img, '.'));
   return extension_loaded('gd') && file_exists($img) && in_array($img_type, $type);
  } 
   
  //获取缩略图的相关比例
  //获取到图片的处理类型
  private function thumb_size( $img_w,$img_h,$t_w,$t_h,$t_type){
   //定义缩略图尺寸
   $w = $t_w;
   $h = $t_h;
    
   //定义图片的原始尺寸
   $cut_w = $img_w;
   $cut_h = $img_h;
    
   //当要目标图像小于缩略图的尺寸时;
   if( $img_w <= $t_w && $img_h < $t_h ){
    $w = $img_w;
    $h = $img_h;
   }else{
    if( !empty($t_type) && $t_type>0 ){
     switch ( $t_type ){
      //当宽度固定时
      case 1:
       $h = $t_w/$img_w*$img_h;
       break;
      //高度固定时
      case 2:
       $w = $t_h/$img_h*$img_w;
       break;
      //宽度固定,高度裁切
      case 3:
       $cut_h = $img_w/$t_w*$t_h;
       break;
      //高度固定,宽度裁切
      case 4:
       $cut_w = $img_h/$t_h*$t_w;
       break;
      //等比例缩放
      default :
       if( ($img_w/$t_w) > ($img_h/$t_h) ){
        $h = $t_w/$img_w*$t_h;
       }elseif( ($img_w/$t_w) < ($img_h/$t_h) ){
        $w = $t_h/$img_h*$t_w;
       }else{
        $w = $t_w;
        $h = $t_h;
       }
     }
    }
     
     
   }
   $arr[0] = $t_w;
   $arr[1] = $t_h;
   $arr[2] = $cut_w;
   $arr[3] = $cut_h;
   return $arr;
 }
}

以上就是本文的全部内容,希望对大家学习PHP程序设计有所帮助。

PHP 相关文章推荐
一个好用的分页函数
Nov 16 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
PHP常用数组函数介绍
Jul 28 PHP
深入探究PHP的多进程编程方法
Aug 18 PHP
Yii基于数组和对象的Model查询技巧实例详解
Dec 28 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
php微信公众号开发之微信企业付款给个人
Oct 04 PHP
PHP基于GD2函数库实现验证码功能示例
Jan 27 PHP
PHP常用函数之格式化时间操作示例
Oct 21 PHP
thinkPHP框架乐观锁和悲观锁实例分析
Oct 30 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
使用JavaScript创建新样式表和新样式规则
Jun 14 #PHP
PHP list() 将数组中的值赋给变量的简单实例
Jun 13 #PHP
PHP处理二进制数据的实现方法
Jun 13 #PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 #PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
Jun 13 #PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
Jun 13 #PHP
PHP简单获取多个checkbox值的方法
Jun 13 #PHP
You might like
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
对textarea框的代码调试,而且功能上使用非常方便,酷
2006/06/30 Javascript
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
js计算精度问题小结
2013/04/22 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
2014/02/20 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
javascript实现网页字符定位的方法
2015/07/14 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
python回调函数用法实例分析
2015/05/09 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
对python模块中多个类的用法详解
2019/01/10 Python
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
德国购买门票网站:ADticket.de
2019/10/31 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
入党积极分子思想汇报
2014/01/02 职场文书
施工班组长岗位职责
2014/01/05 职场文书
中学教师自我鉴定
2014/02/07 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2015年化验员工作总结
2015/04/10 职场文书
通知函格式范文
2015/04/27 职场文书
结婚幸福感言
2015/08/01 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
教师外出学习心得体会
2016/01/18 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript