php实现常见图片格式的水印和缩略图制作(面向对象)
来源: 阅读:748 次 日期:2016-08-17 14:41:55
温馨提示: 小编为您整理了“php实现常见图片格式的水印和缩略图制作(面向对象)”,方便广大网友查阅!

本文实例为大家分享了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程序设计有所帮助。

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map