php图片处理类

ExpandedBlockStart.gif 代码
<? php
/*
图片处理函数功能:缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色
处理并保存历史记录的思路:当有图片有改动时自动生成一张新图片,命名方式可以考虑在原图片的基础上加上步骤,例如:图片名称+__第几步
*/
class  picture{
var   $PICTURE_URL ; // 要处理的图片
var   $DEST_URL = " temp__01.jpg " ; // 生成目标图片位置
var   $PICTURE_CREATE ; // 要创建的图片
var   $TURE_COLOR ; // 新建一个真彩图象

var   $PICTURE_WIDTH ; // 原图片宽度
var   $PICTURE_HEIGHT ; // 原图片高度

/*
水印的类型,默认的为水印文字
*/
var   $MARK_TYPE = 1 ;
var   $WORD ; // 经过UTF-8后的文字
var   $WORD_X ; // 文字横坐标
var   $WORD_Y ; // 文字纵坐标
var   $FONT_TYPE ; // 字体类型
var   $FONT_SIZE = " 12 " ; // 字体大小
var   $FONT_WORD ; // 文字
var   $ANGLE = 0 ; // 文字的角度,默认为0
var   $FONT_COLOR = " #000000 " ; // 文字颜色
var   $FONT_PATH = " font/simkai.ttf " ; // 字体库,默认为宋体
var   $FORCE_URL ; // 水印图片
var   $FORCE_X = 0 ; // 水印横坐标
var   $FORCE_Y = 0 ; // 水印纵坐标
var   $FORCE_START_X = 0 ; // 切起水印的图片横坐标
var   $FORCE_START_Y = 0 ; // 切起水印的图片纵坐标

var   $PICTURE_TYPE ; // 图片类型
var   $PICTURE_MIME ; // 输出的头部

/*
缩放比例为1的话就按缩放高度和宽度缩放
*/
var   $ZOOM = 1 ; // 缩放类型
var   $ZOOM_MULTIPLE ; // 缩放比例
var   $ZOOM_WIDTH ; // 缩放宽度
var   $ZOOM_HEIGHT ; // 缩放高度

/*
裁切,按比例和固定长度、宽度
*/
var   $CUT_TYPE = 1 ; // 裁切类型
var   $CUT_X = 0 ; // 裁切的横坐标
var   $CUT_Y = 0 ; // 裁切的纵坐标
var   $CUT_ ; // 裁切的宽度
var   $CUT_HEIGHT = 100 ; // 裁切的高度

/*
锐化
*/
var   $SHARP = " 7.0 " ; // 锐化程度

/*
透明度处理
*/
var   $ALPHA = ' 100 ' ; // 透明度在0-127之间
var   $ALPHA_X = " 90 " ;
var   $ALPHA_Y = " 50 " ;

/*
任意角度旋转
*/
var   $CIRCUMROTATE = " 90.0 " ; // 注意,必须为浮点数

/*
出错信息
*/
var   $ERROR = array (
' unalviable ' => ' 没有找到相关图片! '
);

/*
构造函数:函数初始化
*/
function  __construct( $PICTURE_URL ){

$this -> get_info( $PICTURE_URL );

}
function  get_info( $PICTURE_URL ){
/*
处理原图片的信息,先检测图片是否存在,不存在则给出相应的信息
*/
@
$SIZE = getimagesize ( $PICTURE_URL );
if ( ! $SIZE ){
   
exit ( $this -> ERROR[ ' unalviable ' ]);
}

// 得到原图片的信息类型、宽度、高度
$this -> PICTURE_MIME = $SIZE [ ' mime ' ];
$this -> PICTURE_;
$this -> PICTURE_HEIGHT = $SIZE [ 1 ];

// 创建图片
switch ( $SIZE [ 2 ]){
   
case   1 :
    
$this -> PICTURE_CREATE = imagecreatefromgif( $PICTURE_URL );
    
$this -> PICTURE_TYPE = " imagejpeg " ;
    
$this -> PICTURE_EXT = " jpg " ;
    
break ;
   
case   2 :
    
$this -> PICTURE_CREATE = imagecreatefromjpeg( $PICTURE_URL );
    
$this -> PICTURE_TYPE = " imagegif " ;
    
$this -> PICTURE_EXT = " gif " ;
    
break ;
   
case   3 :
    
$this -> PICTURE_CREATE = imagecreatefrompng( $PICTURE_URL );
    
$this -> PICTURE_TYPE = " imagepng " ;
    
$this -> PICTURE_EXT = " png " ;
    
break ;
}

/*
文字颜色转换16进制转换成10进制
*/
preg_match_all ( " /([0-f]){2,2}/i " , $this -> FONT_COLOR , $MATCHES );
if ( count ( $MATCHES ) == 3 ){
   
$this -> RED = hexdec ( $MATCHES [ 0 ][ 0 ]);
   
$this -> GREEN = hexdec ( $MATCHES [ 0 ][ 1 ]);
   
$this -> BLUE = hexdec ( $MATCHES [ 0 ][ 2 ]);
}
}

# end of __construct

/*
将16进制的颜色转换成10进制的(R,G,B)
*/
function  hex2dec(){
preg_match_all ( " /([0-f]){2,2}/i " , $this -> FONT_COLOR , $MATCHES );
if ( count ( $MATCHES ) == 3 ){
   
$this -> RED = hexdec ( $MATCHES [ 0 ][ 0 ]);
   
$this -> GREEN = hexdec ( $MATCHES [ 0 ][ 1 ]);
   
$this -> BLUE = hexdec ( $MATCHES [ 0 ][ 2 ]);
}
}

// 缩放类型
function  zoom_type( $ZOOM_TYPE ){
$this -> ZOOM = $ZOOM_TYPE ;
}

// 对图片进行缩放,如果不指定高度和宽度就进行缩放
function  zoom(){
// 缩放的大小
if ( $this -> ZOOM == 0 ){
   
$this -> ZOOM_;gt;PICTURE_WIDTH  *   $this -> ZOOM_MULTIPLE;
   
$this -> ZOOM_HEIGHT = $this -> PICTURE_HEIGHT  *   $this -> ZOOM_MULTIPLE;
}
// 新建一个真彩图象
$this -> TRUE_COLOR = imagecreatetruecolor( $this -> ZOOM_WIDTH , $this -> ZOOM_HEIGHT);
$WHITE = imagecolorallocate( $this -> TRUE_COLOR , 255 , 255 , 255 );
imagefilledrectangle(
$this -> TRUE_COLOR , 0 , 0 , $this -> ZOOM_WIDTH , $this -> ZOOM_HEIGHT , $WHITE );
imagecopyresized(
$this -> TRUE_COLOR , $this -> PICTURE_CREATE , 0 , 0 , 0 , 0 , $this -> ZOOM_WIDTH , $this -> ZOOM_HEIGHT , $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT);
}

# end of zoom
//裁切图片,按坐标或自动

function  cut(){
$this -> TRUE_COLOR = imagecreatetruecolor( $this -> CUT_WIDTH , $this -> CUT_WIDTH);
imagecopy(
$this -> TRUE_COLOR , $this -> PICTURE_CREATE ,   0 ,   0 ,   $this -> CUT_X ,   $this -> CUT_Y , $this -> CUT_WIDTH , $this -> CUT_HEIGHT);
}

# end of cut
/*

在图片上放文字或图片
水印文字
*/
function  _mark_text(){
$this -> TRUE_COLOR = imagecreatetruecolor( $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT);
$this -> WORD = mb_convert_encoding( $this -> FONT_WORD , ' utf-8 ' , ' gb2312 ' );
/*
取得使用 TrueType 字体的文本的范围
*/
$TEMP   =  imagettfbbox( $this -> FONT_SIZE , 0 , $this -> FONT_PATH , $this -> WORD);
$WORD_LENGTH = strlen ( $this -> WORD);
$WORD_WIDTH   = $TEMP [ 2 -   $TEMP [ 6 ];
$WORD_HEIGHT   = $TEMP [ 3 -   $TEMP [ 7 ];
/*
文字水印的默认位置为右下角
*/
if ( $this -> WORD_X == "" ){
   
$this -> WORD_X = $this -> PICTURE_WIDTH - $WORD_WIDTH ;
}
if ( $this -> WORD_Y == "" ){
   
$this -> WORD_Y = $this -> PICTURE_HEIGHT - $WORD_HEIGHT ;
}
imagesettile(
$this -> TRUE_COLOR , $this -> PICTURE_CREATE);
imagefilledrectangle(
$this -> TRUE_COLOR , 0 , 0 , $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT , IMG_COLOR_TILED);
$TEXT2 = imagecolorallocate( $this -> TRUE_COLOR , $this -> RED , $this -> GREEN , $this -> Blue);
imagettftext(
$this -> TRUE_COLOR , $this -> FONT_SIZE , $this -> ANGLE , $this -> WORD_X , $this -> WORD_Y , $TEXT2 , $this -> FONT_PATH , $this -> WORD);
}

/*
水印图片
*/
function  _mark_picture(){

/*
获取水印图片的信息
*/
@
$SIZE = getimagesize ( $this -> FORCE_URL);
if ( ! $SIZE ){
   
exit ( $this -> ERROR[ ' unalviable ' ]);
}
$FORCE_PICTURE_ ;
$FORCE_PICTURE_HEIGHT = $SIZE [ 1 ];
// 创建水印图片
switch ( $SIZE [ 2 ]){
   
case   1 :
    
$FORCE_PICTURE_CREATE = imagecreatefromgif( $this -> FORCE_URL);
    
$FORCE_PICTURE_TYPE = " gif " ;
    
break ;
   
case   2 :
    
$FORCE_PICTURE_CREATE = imagecreatefromjpeg( $this -> FORCE_URL);
    
$FORCE_PICTURE_TYPE = " jpg " ;
    
break ;
   
case   3 :
    
$FORCE_PICTURE_CREATE = imagecreatefrompng( $this -> FORCE_URL);
    
$FORCE_PICTURE_TYPE = " png " ;
    
break ;
}
/*
    判断水印图片的大小,并生成目标图片的大小,如果水印比图片大,则生成图片大小为水印图片的大小。否则生成的图片大小为原图片大小。
*/
$this -> NEW_PICTURE = $this -> PICTURE_CREATE;
if ( $FORCE_PICTURE_WIDTH > $this -> PICTURE_WIDTH){
   
$CREATE_ ;gt;FORCE_START_X;
}
else {
   
$CREATE_ ;gt;PICTURE_WIDTH;
}
if ( $FORCE_PICTURE_HEIGHT > $this -> PICTURE_HEIGHT){
   
$CREATE_HEIGHT = $FORCE_PICTURE_HEIGHT - $this -> FORCE_START_Y;
}
else {
   
$CREATE_HEIGHT = $this -> PICTURE_HEIGHT;
}
/*
    创建一个画布
*/
$NEW_PICTURE_CREATE = imagecreatetruecolor( $CREATE_WIDTH , $CREATE_HEIGHT );
$WHITE = imagecolorallocate( $NEW_PICTURE_CREATE , 255 , 255 , 255 );
/*
    将背景图拷贝到画布中
*/
imagecopy(
$NEW_PICTURE_CREATE ,   $this -> PICTURE_CREATE ,   0 ,   0 ,   0 ,   0 , $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT);

/*
    将目标图片拷贝到背景图片上
*/
imagecopy(
$NEW_PICTURE_CREATE ,   $FORCE_PICTURE_CREATE ,   $this -> FORCE_X ,   $this -> FORCE_Y ,   $this -> FORCE_START_X ,   $this -> FORCE_START_Y , $FORCE_PICTURE_WIDTH , $FORCE_PICTURE_HEIGHT );
$this -> TRUE_COLOR = $NEW_PICTURE_CREATE ;
}
# end of mark

function  alpha_(){
$this -> TRUE_COLOR = imagecreatetruecolor( $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT);
$rgb = " #CDCDCD " ;
$tran_color = " #000000 " ;
for ( $j = 0 ; $j <= $this -> PICTURE_HEIGHT - 1 ; $j ++ ){
   
for  ( $i = 0 ; $i <= $this -> PICTURE_WIDTH - 1 ; $i ++ )
   {
    
$rgb   =  imagecolorat( $this -> PICTURE_CREATE , $i , $j );
    
$r   =  ( $rgb   >>   16 &   0xFF ;
    
$g   =  ( $rgb   >>   8 &   0xFF ;
    
$b   =   $rgb   &   0xFF ;
    
$now_color = imagecolorallocate( $this -> PICTURE_CREATE , $r , $g , $b );
    
if  ( $now_color == $tran_color )
    {
     
continue ;
    }
    
else
    {
     
$color = imagecolorallocatealpha( $this -> PICTURE_CREATE , $r , $g , $b , $ALPHA );
     imagesetpixel(
$this -> PICTURE_CREATE , $ALPHA_X + $i , $ALPHA_Y + $j , $color );
    }
    
$this -> TRUE_COLOR = $this -> PICTURE_CREATE;

   }
}
}

/*
图片旋转:
沿y轴旋转
*/
function  turn_y(){
$this -> TRUE_COLOR = imagecreatetruecolor( $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT);
for  ( $x   =   0 $x   <   $this -> PICTURE_WIDTH;  $x ++ )
{
   imagecopy(
$this -> TRUE_COLOR ,   $this -> PICTURE_CREATE ,   $this -> PICTURE_WIDTH  -   $x   -   1 ,   0 ,   $x ,   0 ,   1 ,   $this -> PICTURE_HEIGHT);
}
}
/*
沿X轴旋转
*/
function  turn_x(){
$this -> TRUE_COLOR = imagecreatetruecolor( $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT);
for  ( $y   =   0 $y   <   $this -> PICTURE_HEIGHT;  $y ++ )
{
   imagecopy(
$this -> TRUE_COLOR ,   $this -> PICTURE_CREATE ,   0 ,   $this -> PICTURE_HEIGHT  -   $y   -   1 ,   0 ,   $y ,   $this -> PICTURE_WIDTH ,   1 );
}
}


/*
任意角度旋转
*/
function  turn(){
$this -> TRUE_COLOR = imagecreatetruecolor( $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT);
imageCopyResized(
$this -> TRUE_COLOR , $this -> PICTURE_CREATE , 0 , 0 , 0 , 0 , $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT , $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT);
$WHITE = imagecolorallocate( $this -> TRUE_COLOR , 255 , 255 , 255 );
$this -> TRUE_COLOR = imagerotate ( $this -> TRUE_COLOR ,   $this -> CIRCUMROTATE ,   $WHITE );
}
/*
图片锐化
*/
function  sharp(){
$this -> TRUE_COLOR = imagecreatetruecolor( $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT);
$cnt = 0 ;
for  ( $x = 0 $x < $this -> PICTURE_WIDTH;  $x ++ ){
   
for  ( $y = 0 $y < $this -> PICTURE_HEIGHT;  $y ++ )
   {
    
$src_clr1   =  imagecolorsforindex( $this -> TRUE_COLOR ,  imagecolorat( $this -> PICTURE_CREATE ,   $x - 1 ,   $y - 1 ));
    
$src_clr2   =  imagecolorsforindex( $this -> TRUE_COLOR ,  imagecolorat( $this -> PICTURE_CREATE ,   $x ,   $y ));
    
$r   =   intval ( $src_clr2 [ " red " ] + $this -> SHARP * ( $src_clr2 [ " red " ] - $src_clr1 [ " red " ]));
    
$g   =   intval ( $src_clr2 [ " green " ] + $this -> SHARP * ( $src_clr2 [ " green " ] - $src_clr1 [ " green " ]));
    
$b   =   intval ( $src_clr2 [ " blue " ] + $this -> SHARP * ( $src_clr2 [ " blue " ] - $src_clr1 [ " blue " ]));
    
$r   =   min ( 255 ,   max ( $r ,   0 ));
    
$g   =   min ( 255 ,   max ( $g ,   0 ));
    
$b   =   min ( 255 ,   max ( $b ,   0 ));
    
if  (( $DST_CLR = imagecolorexact( $this -> PICTURE_CREATE ,   $r ,   $g ,   $b )) ==- 1 )
    
$DST_CLR   =  imagecolorallocate( $this -> PICTURE_CREATE ,   $r ,   $g ,   $b );
    
$cnt ++ ;
    
if  ( $DST_CLR ==- 1 die ( " color allocate faile at  $x $y  ( $cnt ). " );
    imagesetpixel(
$this -> TRUE_COLOR ,   $x ,   $y ,   $DST_CLR );
   }
}
}

/*
   将图片反色处理??
*/
function  return_color(){
/*
    创建一个画布
*/
$NEW_PICTURE_CREATE = imagecreate( $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT);
$WHITE = imagecolorallocate( $NEW_PICTURE_CREATE , 255 , 255 , 255 );
/*
    将背景图拷贝到画布中
*/
imagecopy(
$NEW_PICTURE_CREATE ,   $this -> PICTURE_CREATE ,   0 ,   0 ,   0 ,   0 , $this -> PICTURE_WIDTH , $this -> PICTURE_HEIGHT);
$this -> TRUE_COLOR = $NEW_PICTURE_CREATE ;
}

/*
生成目标图片并显示
*/
function  show(){
//  判断浏览器,若是IE就不发送头
if ( isset ( $_SERVER [ ' HTTP_USER_AGENT ' ]))
{
   
$ua   =   strtoupper ( $_SERVER [ ' HTTP_USER_AGENT ' ]);
   
if ( ! preg_match ( ' /^.*MSIE.*\)$/i ' , $ua ))
   {
    
header ( " Content-type: $this ->PICTURE_MIME " );
   }
}
$OUT = $this -> PICTURE_TYPE;
$OUT ( $this -> TRUE_COLOR);
}

/*
生成目标图片并保存
*/
function  save_picture(){
//  以 JPEG 格式将图像输出到浏览器或文件
$OUT = $this -> PICTURE_TYPE;
if ( function_exists ( $OUT )){
   
//  判断浏览器,若是IE就不发送头
    if ( isset ( $_SERVER [ ' HTTP_USER_AGENT ' ]))
   {
    
$ua   =   strtoupper ( $_SERVER [ ' HTTP_USER_AGENT ' ]);
    
if ( ! preg_match ( ' /^.*MSIE.*\)$/i ' , $ua ))
    {
     
header ( " Content-type: $this ->PICTURE_MIME " );
    }
   }
   
if ( ! $this -> TRUE_COLOR){
    
exit ( $this -> ERROR[ ' unavilable ' ]);
   }
else {
    
$OUT ( $this -> TRUE_COLOR , $this -> DEST_URL);
    
$OUT ( $this -> TRUE_COLOR);
   }
}
}
/*
析构函数:释放图片
*/
function  __destruct(){
/* 释放图片 */
imagedestroy(
$this -> TRUE_COLOR);
imagedestroy(
$this -> PICTURE_CREATE);
}
# end of class
}
?>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值