两个强悍的php 图像处理类1


Posted in PHP onJune 15, 2009
<?php 
/** 
* 基本图片处理,用于完成图片缩入,水印添加 
* 当水印图超过目标图片尺寸时,水印图能自动适应目标图片而缩小 
* 水印图可以设置跟背景的合并度 
* 
* Copyright(c) 2005 by ustb99. All rights reserved 
* 
* To contact the author write to {@link mailto:ustb80@163.com} 
* 
* @author 偶然 
* @version $Id: thumb.class.php,v 1.9 2006/09/30 09:31:56 zengjian Exp $ 
* @package system 
*/ 
/** 
* ThumbHandler 
* @access public 
*/ 
/* 
使用方法: 
自动裁切: 
程序会按照图片的尺寸从中部裁切最大的正方形,并按目标尺寸进行缩略 
$t->setSrcImg("img/test.jpg"); 
$t->setCutType(1);//这一句就OK了 
$t->setDstImg("tmp/new_test.jpg"); 
$t->createImg(60,60); 
手工裁切: 
程序会按照指定的位置从源图上取图 
$t->setSrcImg("img/test.jpg"); 
$t->setCutType(2);//指明为手工裁切 
$t->setSrcCutPosition(100, 100);// 源图起点坐标 
$t->setRectangleCut(300, 200);// 裁切尺寸 
$t->setDstImg("tmp/new_test.jpg"); 
$t->createImg(300,200); 
*/ 
class ThumbHandler 
{ 
var $dst_img;// 目标文件 
var $h_src; // 图片资源句柄 
var $h_dst;// 新图句柄 
var $h_mask;// 水印句柄 
var $img_create_quality = 100;// 图片生成质量 
var $img_display_quality = 80;// 图片显示质量,默认为75 
var $img_scale = 0;// 图片缩放比例 
var $src_w = 0;// 原图宽度 
var $src_h = 0;// 原图高度 
var $dst_w = 0;// 新图总宽度 
var $dst_h = 0;// 新图总高度 
var $fill_w;// 填充图形宽 
var $fill_h;// 填充图形高 
var $copy_w;// 拷贝图形宽 
var $copy_h;// 拷贝图形高 
var $src_x = 0;// 原图绘制起始横坐标 
var $src_y = 0;// 原图绘制起始纵坐标 
var $start_x;// 新图绘制起始横坐标 
var $start_y;// 新图绘制起始纵坐标 
var $mask_word;// 水印文字 
var $mask_img;// 水印图片 
var $mask_pos_x = 0;// 水印横坐标 
var $mask_pos_y = 0;// 水印纵坐标 
var $mask_offset_x = 5;// 水印横向偏移 
var $mask_offset_y = 5;// 水印纵向偏移 
var $font_w;// 水印字体宽 
var $font_h;// 水印字体高 
var $mask_w;// 水印宽 
var $mask_h;// 水印高 
var $mask_font_color = "#ffffff";// 水印文字颜色 
var $mask_font = 2;// 水印字体 
var $font_size;// 尺寸 
var $mask_position = 0;// 水印位置 
var $mask_img_pct = 50;// 图片合并程度,值越大,合并程序越低 
var $mask_txt_pct = 50;// 文字合并程度,值越小,合并程序越低 
var $img_border_size = 0;// 图片边框尺寸 
var $img_border_color;// 图片边框颜色 
var $_flip_x=0;// 水平翻转次数 
var $_flip_y=0;// 垂直翻转次数 
var $cut_type=0;// 剪切类型 
var $img_type;// 文件类型 
// 文件类型定义,并指出了输出图片的函数 
var $all_type = array( 
"jpg" => array("output"=>"imagejpeg"), 
"gif" => array("output"=>"imagegif"), 
"png" => array("output"=>"imagepng"), 
"wbmp" => array("output"=>"image2wbmp"), 
"jpeg" => array("output"=>"imagejpeg")); 
/** 
* 构造函数 
*/ 
function ThumbHandler() 
{ 
$this->mask_font_color = "#ffffff"; 
$this->font = 2; 
$this->font_size = 12; 
} 
/** 
* 取得图片的宽 
*/ 
function getImgWidth($src) 
{ 
return imagesx($src); 
} 
/** 
* 取得图片的高 
*/ 
function getImgHeight($src) 
{ 
return imagesy($src); 
} 
/** 
* 设置图片生成路径 
* 
* @param string $src_img 图片生成路径 
*/ 
function setSrcImg($src_img, $img_type=null) 
{ 
if(!file_exists($src_img)) 
{ 
die("图片不存在"); 
} 
if(!emptyempty($img_type)) 
{ 
$this->img_type = $img_type; 
} 
else 
{ 
$this->img_type = $this->_getImgType($src_img); 
} 
$this->_checkValid($this->img_type); 
// file_get_contents函数要求php版本>4.3.0 
$src = ''; 
if(function_exists("file_get_contents")) 
{ 
$src = file_get_contents($src_img); 
} 
else 
{ 
$handle = fopen ($src_img, "r"); 
while (!feof ($handle)) 
{ 
$src .= fgets($fd, 4096); 
} 
fclose ($handle); 
} 
if(emptyempty($src)) 
{ 
die("图片源为空"); 
} 
$this->h_src = @ImageCreateFromString($src); 
$this->src_w = $this->getImgWidth($this->h_src); 
$this->src_h = $this->getImgHeight($this->h_src); 
} 
/** 
* 设置图片生成路径 
* 
* @param string $dst_img 图片生成路径 
*/ 
function setDstImg($dst_img) 
{ 
$arr = explode('/',$dst_img); 
$last = array_pop($arr); 
$path = implode('/',$arr); 
$this->_mkdirs($path); 
$this->dst_img = $dst_img; 
} 
/** 
* 设置图片的显示质量 
* 
* @param string $n 质量 
*/ 
function setImgDisplayQuality($n) 
{ 
$this->img_display_quality = (int)$n; 
} 
/** 
* 设置图片的生成质量 
* 
* @param string $n 质量 
*/ 
function setImgCreateQuality($n) 
{ 
$this->img_create_quality = (int)$n; 
} 
/** 
* 设置文字水印 
* 
* @param string $word 水印文字 
* @param integer $font 水印字体 
* @param string $color 水印字体颜色 
*/ 
function setMaskWord($word) 
{ 
$this->mask_word .= $word; 
} 
/** 
* 设置字体颜色 
* 
* @param string $color 字体颜色 
*/ 
function setMaskFontColor($color="#ffffff") 
{ 
$this->mask_font_color = $color; 
} 
/** 
* 设置水印字体 
* 
* @param string|integer $font 字体 
*/ 
function setMaskFont($font=2) 
{ 
if(!is_numeric($font) && !file_exists($font)) 
{ 
die("字体文件不存在"); 
} 
$this->font = $font; 
} 
/** 
* 设置文字字体大小,仅对truetype字体有效 
*/ 
function setMaskFontSize($size = "12") 
{ 
$this->font_size = $size; 
} 
/** 
* 设置图片水印 
* 
* @param string $img 水印图片源 
*/ 
function setMaskImg($img) 
{ 
$this->mask_img = $img; 
} 
/** 
* 设置水印横向偏移 
* 
* @param integer $x 横向偏移量 
*/ 
function setMaskOffsetX($x) 
{ 
$this->mask_offset_x = (int)$x; 
} 
/** 
* 设置水印纵向偏移 
* 
* @param integer $y 纵向偏移量 
*/ 
function setMaskOffsetY($y) 
{ 
$this->mask_offset_y = (int)$y; 
} 
/** 
* 指定水印位置 
* 
* @param integer $position 位置,1:左上,2:左下,3:右上,0/4:右下 
*/ 
function setMaskPosition($position=0) 
{ 
$this->mask_position = (int)$position; 
} 
/** 
* 设置图片合并程度 
* 
* @param integer $n 合并程度 
*/ 
function setMaskImgPct($n) 
{ 
$this->mask_img_pct = (int)$n; 
} 
/** 
* 设置文字合并程度 
* 
* @param integer $n 合并程度 
*/ 
function setMaskTxtPct($n) 
{ 
$this->mask_txt_pct = (int)$n; 
} 
/** 
* 设置缩略图边框 
* 
* @param (类型) (参数名) (描述) 
*/ 
function setDstImgBorder($size=1, $color="#000000") 
{ 
$this->img_border_size = (int)$size; 
$this->img_border_color = $color; 
} 
/** 
* 水平翻转 
*/ 
function flipH() 
{ 
$this->_flip_x++; 
} 
/** 
* 垂直翻转 
*/ 
function flipV() 
{ 
$this->_flip_y++; 
} 
/** 
* 设置剪切类型 
* 
* @param (类型) (参数名) (描述) 
*/ 
function setCutType($type) 
{ 
$this->cut_type = (int)$type; 
} 
/** 
* 设置图片剪切 
* 
* @param integer $width 矩形剪切 
*/ 
function setRectangleCut($width, $height) 
{ 
$this->fill_w = (int)$width; 
$this->fill_h = (int)$height; 
} 
/** 
* 设置源图剪切起始坐标点 
* 
* @param (类型) (参数名) (描述) 
*/ 
function setSrcCutPosition($x, $y) 
{ 
$this->src_x = (int)$x; 
$this->src_y = (int)$y; 
} 
/** 
* 创建图片,主函数 
* @param integer $a 当缺少第二个参数时,此参数将用作百分比, 
* 否则作为宽度值 
* @param integer $b 图片缩放后的高度 
*/ 
function createImg($a, $b=null) 
{ 
$num = func_num_args(); 
if(1 == $num) 
{ 
$r = (int)$a; 
if($r < 1) 
{ 
die("图片缩放比例不得小于1"); 
} 
$this->img_scale = $r; 
$this->_setNewImgSize($r); 
} 
if(2 == $num) 
{ 
$w = (int)$a; 
$h = (int)$b; 
if(0 == $w) 
{ 
die("目标宽度不能为0"); 
} 
if(0 == $h) 
{ 
die("目标高度不能为0"); 
} 
$this->_setNewImgSize($w, $h); 
} 
if($this->_flip_x%2!=0) 
{ 
$this->_flipH($this->h_src); 
} 
if($this->_flip_y%2!=0) 
{ 
$this->_flipV($this->h_src); 
} 
$this->_createMask(); 
$this->_output(); 
// 释放 
if(imagedestroy($this->h_src) && imagedestroy($this->h_dst)) 
{ 
Return true; 
} 
else 
{ 
Return false; 
} 
} 
/** 
* 生成水印,调用了生成水印文字和水印图片两个方法 
*/ 
function _createMask() 
{ 
if($this->mask_word) 
{ 
// 获取字体信息 
$this->_setFontInfo(); 
if($this->_isFull()) 
{ 
die("水印文字过大"); 
} 
else 
{ 
$this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h); 
$white = ImageColorAllocate($this->h_dst,255,255,255); 
imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色 
$this->_drawBorder(); 
imagecopyresampled( $this->h_dst, $this->h_src, 
$this->start_x, $this->start_y, 
$this->src_x, $this->src_y, 
$this->fill_w, $this->fill_h, 
$this->copy_w, $this->copy_h); 
$this->_createMaskWord($this->h_dst); 
} 
} 
if($this->mask_img) 
{ 
$this->_loadMaskImg();//加载时,取得宽高 
if($this->_isFull()) 
{ 
// 将水印生成在原图上再拷 
$this->_createMaskImg($this->h_src); 
$this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h); 
$white = ImageColorAllocate($this->h_dst,255,255,255); 
imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色 
$this->_drawBorder(); 
imagecopyresampled( $this->h_dst, $this->h_src, 
$this->start_x, $this->start_y, 
$this->src_x, $this->src_y, 
$this->fill_w, $this->start_y, 
$this->copy_w, $this->copy_h); 
} 
else 
{ 
// 创建新图并拷贝 
$this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h); 
$white = ImageColorAllocate($this->h_dst,255,255,255); 
imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色 
$this->_drawBorder(); 
imagecopyresampled( $this->h_dst, $this->h_src, 
$this->start_x, $this->start_y, 
$this->src_x, $this->src_y, 
$this->fill_w, $this->fill_h, 
$this->copy_w, $this->copy_h); 
$this->_createMaskImg($this->h_dst); 
} 
} 
if(emptyempty($this->mask_word) && emptyempty($this->mask_img)) 
{ 
$this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h); 
$white = ImageColorAllocate($this->h_dst,255,255,255); 
imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色 
$this->_drawBorder(); 
imagecopyresampled( $this->h_dst, $this->h_src, 
$this->start_x, $this->start_y, 
$this->src_x, $this->src_y, 
$this->fill_w, $this->fill_h, 
$this->copy_w, $this->copy_h); 
} 
} 
/** 
* 画边框 
*/ 
function _drawBorder() 
{ 
if(!emptyempty($this->img_border_size)) 
{ 
$c = $this->_parseColor($this->img_border_color); 
$color = ImageColorAllocate($this->h_src,$c[0], $c[1], $c[2]); 
imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$color);// 填充背景色 
} 
} 
/** 
* 生成水印文字 
*/ 
function _createMaskWord($src) 
{ 
$this->_countMaskPos(); 
$this->_checkMaskValid(); 
$c = $this->_parseColor($this->mask_font_color); 
$color = imagecolorallocatealpha($src, $c[0], $c[1], $c[2], $this->mask_txt_pct); 
if(is_numeric($this->font)) 
{ 
imagestring($src, 
$this->font, 
$this->mask_pos_x, $this->mask_pos_y, 
$this->mask_word, 
$color); 
} 
else 
{ 
imagettftext($src, 
$this->font_size, 0, 
$this->mask_pos_x, $this->mask_pos_y, 
$color, 
$this->font, 
$this->mask_word); 
} 
} 
/** 
* 生成水印图 
*/ 
function _createMaskImg($src) 
{ 
$this->_countMaskPos(); 
$this->_checkMaskValid(); 
imagecopymerge($src, 
$this->h_mask, 
$this->mask_pos_x ,$this->mask_pos_y, 
0, 0, 
$this->mask_w, $this->mask_h, 
$this->mask_img_pct); 
imagedestroy($this->h_mask); 
} 
/** 
* 加载水印图 
*/ 
function _loadMaskImg() 
{ 
$mask_type = $this->_getImgType($this->mask_img); 
$this->_checkValid($mask_type); 
// file_get_contents函数要求php版本>4.3.0 
$src = ''; 
if(function_exists("file_get_contents")) 
{ 
$src = file_get_contents($this->mask_img); 
} 
else 
{ 
$handle = fopen ($this->mask_img, "r"); 
while (!feof ($handle)) 
{ 
$src .= fgets($fd, 4096); 
} 
fclose ($handle); 
} 
if(emptyempty($this->mask_img)) 
{ 
die("水印图片为空"); 
} 
$this->h_mask = ImageCreateFromString($src); 
$this->mask_w = $this->getImgWidth($this->h_mask); 
$this->mask_h = $this->getImgHeight($this->h_mask); 
} 
/** 
* 图片输出 
*/ 
function _output() 
{ 
$img_type = $this->img_type; 
$func_name = $this->all_type[$img_type]['output']; 
if(function_exists($func_name)) 
{ 
// 判断浏览器,若是IE就不发送头 
if(isset($_SERVER['HTTP_USER_AGENT'])) 
{ 
$ua = strtoupper($_SERVER['HTTP_USER_AGENT']); 
if(!preg_match('/^.*MSIE.*\)$/i',$ua)) 
{ 
header("Content-type:$img_type"); 
} 
} 
$func_name($this->h_dst, $this->dst_img, $this->img_display_quality); 
} 
else 
{ 
Return false; 
} 
} 
/** 
* 分析颜色 
* 
* @param string $color 十六进制颜色 
*/ 
function _parseColor($color) 
{ 
$arr = array(); 
for($ii=1; $ii<strlen ($color); $ii++) 
{ 
$arr[] = hexdec(substr($color,$ii,2)); 
$ii++; 
} 
Return $arr; 
} 
/** 
* 计算出位置坐标 
*/ 
function _countMaskPos() 
{ 
if($this->_isFull()) 
{ 
switch($this->mask_position) 
{ 
case 1: 
// 左上 
$this->mask_pos_x = $this->mask_offset_x + $this->img_border_size; 
$this->mask_pos_y = $this->mask_offset_y + $this->img_border_size; 
break; 
case 2: 
// 左下 
$this->mask_pos_x = $this->mask_offset_x + $this->img_border_size; 
$this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y; 
break; 
case 3: 
// 右上 
$this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x; 
$this->mask_pos_y = $this->mask_offset_y + $this->img_border_size; 
break; 
case 4: 
// 右下 
$this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x; 
$this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y; 
break; 
default: 
// 默认将水印放到右下,偏移指定像素 
$this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x; 
$this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y; 
break; 
} 
} 
else 
{ 
switch($this->mask_position) 
{ 
case 1: 
// 左上 
$this->mask_pos_x = $this->mask_offset_x + $this->img_border_size; 
$this->mask_pos_y = $this->mask_offset_y + $this->img_border_size; 
break; 
case 2: 
// 左下 
$this->mask_pos_x = $this->mask_offset_x + $this->img_border_size; 
$this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size; 
break; 
case 3: 
// 右上 
$this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size; 
$this->mask_pos_y = $this->mask_offset_y + $this->img_border_size; 
break; 
case 4: 
// 右下 
$this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size; 
$this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size; 
break; 
default: 
// 默认将水印放到右下,偏移指定像素 
$this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size; 
$this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size; 
break; 
} 
} 
} 
/** 
* 设置字体信息 
*/ 
function _setFontInfo() 
{ 
if(is_numeric($this->font)) 
{ 
$this->font_w = imagefontwidth($this->font); 
$this->font_h = imagefontheight($this->font); 
// 计算水印字体所占宽高 
$word_length = strlen($this->mask_word); 
$this->mask_w = $this->font_w*$word_length; 
$this->mask_h = $this->font_h; 
} 
else 
{ 
$arr = imagettfbbox ($this->font_size,0, $this->font,$this->mask_word); 
$this->mask_w = abs($arr[0] - $arr[2]); 
$this->mask_h = abs($arr[7] - $arr[1]); 
} 
} 
/** 
* 设置新图尺寸 
* 
* @param integer $img_w 目标宽度 
* @param integer $img_h 目标高度 
*/ 
function _setNewImgSize($img_w, $img_h=null) 
{ 
$num = func_num_args(); 
if(1 == $num) 
{ 
$this->img_scale = $img_w;// 宽度作为比例 
$this->fill_w = round($this->src_w * $this->img_scale / 100) - $this->img_border_size*2; 
$this->fill_h = round($this->src_h * $this->img_scale / 100) - $this->img_border_size*2; 
// 源文件起始坐标 
$this->src_x = 0; 
$this->src_y = 0; 
$this->copy_w = $this->src_w; 
$this->copy_h = $this->src_h; 
// 目标尺寸 
$this->dst_w = $this->fill_w + $this->img_border_size*2; 
$this->dst_h = $this->fill_h + $this->img_border_size*2; 
} 
if(2 == $num) 
{ 
$fill_w = (int)$img_w - $this->img_border_size*2; 
$fill_h = (int)$img_h - $this->img_border_size*2; 
if($fill_w < 0 || $fill_h < 0) 
{ 
die("图片边框过大,已超过了图片的宽度"); 
} 
$rate_w = $this->src_w/$fill_w; 
$rate_h = $this->src_h/$fill_h; 
switch($this->cut_type) 
{ 
case 0: 
// 如果原图大于缩略图,产生缩小,否则不缩小 
if($rate_w < 1 && $rate_h < 1) 
{ 
$this->fill_w = (int)$this->src_w; 
$this->fill_h = (int)$this->src_h; 
} 
else 
{ 
if($rate_w >= $rate_h) 
{ 
$this->fill_w = (int)$fill_w; 
$this->fill_h = round($this->src_h/$rate_w); 
} 
else 
{ 
$this->fill_w = round($this->src_w/$rate_h); 
$this->fill_h = (int)$fill_h; 
} 
} 
$this->src_x = 0; 
$this->src_y = 0; 
$this->copy_w = $this->src_w; 
$this->copy_h = $this->src_h; 
// 目标尺寸 
$this->dst_w = $this->fill_w + $this->img_border_size*2; 
$this->dst_h = $this->fill_h + $this->img_border_size*2; 
break; 
// 自动裁切 
case 1: 
// 如果图片是缩小剪切才进行操作 
if($rate_w >= 1 && $rate_h >=1) 
{ 
if($this->src_w > $this->src_h) 
{ 
$src_x = round($this->src_w-$this->src_h)/2; 
$this->setSrcCutPosition($src_x, 0); 
$this->setRectangleCut($fill_h, $fill_h); 
$this->copy_w = $this->src_h; 
$this->copy_h = $this->src_h; 
} 
elseif($this->src_w < $this->src_h) 
{ 
$src_y = round($this->src_h-$this->src_w)/2; 
$this->setSrcCutPosition(0, $src_y); 
$this->setRectangleCut($fill_w, $fill_h); 
$this->copy_w = $this->src_w; 
$this->copy_h = $this->src_w; 
} 
else 
{ 
$this->setSrcCutPosition(0, 0); 
$this->copy_w = $this->src_w; 
$this->copy_h = $this->src_w; 
$this->setRectangleCut($fill_w, $fill_h); 
} 
} 
else 
{ 
$this->setSrcCutPosition(0, 0); 
$this->setRectangleCut($this->src_w, $this->src_h); 
$this->copy_w = $this->src_w; 
$this->copy_h = $this->src_h; 
} 
// 目标尺寸 
$this->dst_w = $this->fill_w + $this->img_border_size*2; 
$this->dst_h = $this->fill_h + $this->img_border_size*2; 
break; 
// 手工裁切 
case 2: 
$this->copy_w = $this->fill_w; 
$this->copy_h = $this->fill_h; 
// 目标尺寸 
$this->dst_w = $this->fill_w + $this->img_border_size*2; 
$this->dst_h = $this->fill_h + $this->img_border_size*2; 
break; 
default: 
break; 
} 
} 
// 目标文件起始坐标 
$this->start_x = $this->img_border_size; 
$this->start_y = $this->img_border_size; 
} 
/** 
* 检查水印图是否大于生成后的图片宽高 
*/ 
function _isFull() 
{ 
Return ( $this->mask_w + $this->mask_offset_x > $this->fill_w 
|| $this->mask_h + $this->mask_offset_y > $this->fill_h) 
?true:false; 
} 
/** 
* 检查水印图是否超过原图 
*/ 
function _checkMaskValid() 
{ 
if( $this->mask_w + $this->mask_offset_x > $this->src_w 
|| $this->mask_h + $this->mask_offset_y > $this->src_h) 
{ 
die("水印图片尺寸大于原图,请缩小水印图"); 
} 
} 
/** 
* 取得图片类型 
* 
* @param string $file_path 文件路径 
*/ 
function _getImgType($file_path) 
{ 
$type_list = array("1"=>"gif","2"=>"jpg","3"=>"png","4"=>"swf","5" => "psd","6"=>"bmp","15"=>"wbmp"); 
if(file_exists($file_path)) 
{ 
$img_info = @getimagesize ($file_path); 
if(isset($type_list[$img_info[2]])) 
{ 
Return $type_list[$img_info[2]]; 
} 
} 
else 
{ 
die("文件不存在,不能取得文件类型!"); 
} 
} 
/** 
* 检查图片类型是否合法,调用了array_key_exists函数,此函数要求 
* php版本大于4.1.0 
* 
* @param string $img_type 文件类型 
*/ 
function _checkValid($img_type) 
{ 
if(!array_key_exists($img_type, $this->all_type)) 
{ 
Return false; 
} 
} 
/** 
* 按指定路径生成目录 
* 
* @param string $path 路径 
*/ 
function _mkdirs($path) 
{ 
$adir = explode('/',$path); 
$dirlist = ''; 
$rootdir = array_shift($adir); 
if(($rootdir!='.'||$rootdir!='..')&&!file_exists($rootdir)) 
{ 
@mkdir($rootdir); 
} 
foreach($adir as $key=>$val) 
{ 
if($val!='.'&&$val!='..') 
{ 
$dirlist .= "/".$val; 
$dirpath = $rootdir.$dirlist; 
if(!file_exists($dirpath)) 
{ 
@mkdir($dirpath); 
@chmod($dirpath,0777); 
} 
} 
} 
} 
/** 
* 垂直翻转 
* 
* @param string $src 图片源 
*/ 
function _flipV($src) 
{ 
$src_x = $this->getImgWidth($src); 
$src_y = $this->getImgHeight($src); 
$new_im = imagecreatetruecolor($src_x, $src_y); 
for ($y = 0; $y < $src_y; $y++) 
{ 
imagecopy($new_im, $src, 0, $src_y - $y - 1, 0, $y, $src_x, 1); 
} 
$this->h_src = $new_im; 
} 
/** 
* 水平翻转 
* 
* @param string $src 图片源 
*/ 
function _flipH($src) 
{ 
$src_x = $this->getImgWidth($src); 
$src_y = $this->getImgHeight($src); 
$new_im = imagecreatetruecolor($src_x, $src_y); 
for ($x = 0; $x < $src_x; $x++) 
{ 
imagecopy($new_im, $src, $src_x - $x - 1, 0, $x, 0, 1, $src_y); 
} 
$this->h_src = $new_im; 
} 
} 
使用实例: 
< ?php 
require_once('lib/thumb.class.php'); 
$t = new ThumbHandler(); 
$t->setSrcImg("img/test.jpg"); 
$t->setDstImg("tmp/new_test.jpg"); 
$t->setMaskImg("img/test.gif"); 
$t->setMaskPosition(1); 
$t->setMaskImgPct(80); 
$t->setDstImgBorder(4,"#dddddd"); 
// 指定缩放比例 
$t->createImg(300,200); 
?> 
<?php 
require_once('lib/thumb.class.php'); 
$t = new ThumbHandler(); 
// 基本使用 
$t->setSrcImg("img/test.jpg"); 
$t->setMaskWord("test"); 
$t->setDstImgBorder(10,"#dddddd"); 
// 指定缩放比例 
$t->createImg(50); 
?> 
<?php 
equire_once('lib/thumb.class.php'); 
$t = new ThumbHandler(); 
// 基本使用 
$t->setSrcImg("img/test.jpg"); 
$t->setMaskWord("test"); 
// 指定固定宽高 
$t->createImg(200,200); 
?> 
<?php 
require_once('lib/thumb.class.php'); 
$t = new ThumbHandler(); 
$t->setSrcImg("img/test.jpg"); 
$t->setDstImg("tmp/new_test.jpg"); 
$t->setMaskWord("test"); 
// 指定固定宽高 
$t->createImg(200,200); 
?> 
<?php 
require_once('lib/thumb.class.php'); 
$t = new ThumbHandler(); 
$t->setSrcImg("img/test.jpg"); 
// 指定字体文件地址 
$t->setMaskFont("c:/winnt/fonts/arial.ttf"); 
$t->setMaskFontSize(20); 
$t->setMaskFontColor("#ffff00"); 
$t->setMaskWord("test3333333"); 
$t->setDstImgBorder(99,"#dddddd"); 
$t->createImg(50); 
?> 
<?php 
require_once('lib/thumb.class.php'); 
$t = new ThumbHandler(); 
$t->setSrcImg("img/test.jpg"); 
$t->setMaskOffsetX(55); 
$t->setMaskOffsetY(55); 
$t->setMaskPosition(1); 
//$t->setMaskPosition(2); 
//$t->setMaskPosition(3); 
//$t->setMaskPosition(4); 
$t->setMaskFontColor("#ffff00"); 
$t->setMaskWord("test"); 
// 指定固定宽高 
$t->createImg(50); 
?> 
<?php 
require_once('lib/thumb.class.php'); 
$t = new ThumbHandler(); 
$t->setSrcImg("img/test.jpg"); 
$t->setMaskFont("c:/winnt/fonts/simyou.ttf"); 
$t->setMaskFontSize(20); 
$t->setMaskFontColor("#ffffff"); 
$t->setMaskTxtPct(20); 
$t->setDstImgBorder(10,"#dddddd"); 
$text = "中文"; 
$str = mb_convert_encoding($text, "UTF-8", "gb2312"); 
$t->setMaskWord($str); 
$t->setMaskWord("test"); 
// 指定固定宽高 
$t->createImg(50); 
?>
PHP 相关文章推荐
PHP的中问验证码
Nov 25 PHP
用PHP为SHOPEX增加日志功能代码
Jul 02 PHP
php函数之子字符串替换&amp;#65279; str_replace
Mar 23 PHP
PHP计算2点经纬度之间的距离代码
Aug 12 PHP
php-fpm配置详解
Feb 12 PHP
在Win7 中为php扩展配置Xcache
Oct 08 PHP
PHP实现163邮箱自动发送邮件
Mar 29 PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
php 后端实现JWT认证方法示例
Sep 04 PHP
Thinkphp集成抖音SDK的实现方法
Apr 28 PHP
PHP写MySQL数据 实现代码
Jun 15 #PHP
php ignore_user_abort与register_shutdown_function 使用方法
Jun 14 #PHP
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 #PHP
PHP 定界符 使用技巧
Jun 14 #PHP
php 变量定义方法
Jun 14 #PHP
PHP 函数语法介绍一
Jun 14 #PHP
PHP 木马攻击防御技巧
Jun 13 #PHP
You might like
php xfocus防注入资料
2008/04/27 PHP
PHP 一个比较完善的简单文件上传
2010/03/25 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
[22:59]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
python binascii 进制转换实例
2019/06/12 Python
Django用户认证系统 User对象解析
2019/08/02 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
酒店司机岗位职责
2013/12/14 职场文书
毕业生就业自荐书
2013/12/15 职场文书
财产公证书
2014/04/10 职场文书
比赛口号大全
2014/06/10 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
使用golang编写一个并发工作队列
2021/05/08 Golang
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server