php實現(xiàn)常見圖片格式的水印和縮略圖制作(面向?qū)ο?
來源:易賢網(wǎng) 閱讀:775 次 日期:2016-08-17 14:41:55
溫馨提示:易賢網(wǎng)小編為您整理了“php實現(xiàn)常見圖片格式的水印和縮略圖制作(面向?qū)ο?”,方便廣大網(wǎng)友查閱!

本文實例為大家分享了php水印和縮略圖制作代碼,使用面向?qū)ο蟮姆椒▉韺崿F(xiàn)常見圖片格式jpg,png,gif的水印和縮略圖的制作,供大家參考,具體內(nèi)容如下

<?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 = '樂趣網(wǎng)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';

 //縮略圖函數(shù)處理

 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]);

  //獲取到相關(guān)尺寸

  $thumb_size = $this->thumb_size($img_w,$img_h,$t_w,$t_h,$t_type);

  //確定原始圖像類型

  //利用自定義函數(shù)來實現(xiàn)圖片類型的確定

  $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;

  //水印的開啟狀態(tài)

  $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);

  } 

  //獲取縮略圖的相關(guān)比例

  //獲取到圖片的處理類型

  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;

 }

}

以上就是本文的全部內(nèi)容,希望對大家學習PHP程序設(shè)計有所幫助。

更多信息請查看網(wǎng)絡編程
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)