php 图片处理类 (积累)

<?php
/*
图片处理类:缩略,裁剪,圆角,倾斜
*/
class  resizeimage
{
    //图片类型
    var  $type ;
    //实际宽度
    var  $width ;
    //实际高度
    var  $height ;
    //改变后的宽度
    var  $resize_width ;
    //改变后的高度
    var  $resize_height ;
    //是否裁图
    var  $cut ;
    //源图象
    var  $srcimg ;
    //目标图象地址
    var  $dstimg ;
    //圆角源
    var  $corner ;
    var  $im ;
function  resizeimage( $img $corner $wid $hei , $c $corner_radius $angle )
    {
        $this ->srcimg =  $img ;
     $this ->corner =  $corner ;
        $this ->resize_width =  $wid ;
        $this ->resize_height =  $hei ;
        $this ->cut =  $c ;
     $this ->corner_radius =  $corner_radius ;
     $this ->angle =  $angle ;
        //图片的类型
        $this ->type =  substr ( strrchr ( $this ->srcimg, "." ),1);
        //初始化图象
        $this ->initi_img();
        //目标图象地址
        $this  -> dst_img();
        //--
        $this ->width = imagesx( $this ->im);
        $this ->height = imagesy( $this ->im);
        //生成图象
        $this ->newimg();
        ImageDestroy ( $this ->im);
    }
    function  newimg()
    {
        //改变后的图象的比例
        $resize_ratio  = ( $this ->resize_width)/( $this ->resize_height);
        //实际图象的比例
        $ratio  = ( $this ->width)/( $this ->height);
        if (( $this ->cut)== "1" )
        //裁图
        {
            if ( $ratio >= $resize_ratio )
            //高度优先
            {
                $newimg  = imagecreatetruecolor( $this ->resize_width, $this ->resize_height);
                imagecopyresampled( $newimg $this ->im, 0, 0, 0, 0,  $this ->resize_width, $this ->resize_height, (( $this ->height)* $resize_ratio ),  $this ->height);
       $tmp  $this ->rounded_corner( $newimg , $this ->resize_width);
                imagepng ( $tmp , $this ->dstimg);
            }
            if ( $ratio < $resize_ratio )
            //宽度优先
            {
                $newimg  = imagecreatetruecolor( $this ->resize_width, $this ->resize_height);
                imagecopyresampled( $newimg $this ->im, 0, 0, 0, 0,  $this ->resize_width,  $this ->resize_height,  $this ->width, (( $this ->width)/ $resize_ratio ));
       $tmp  $this ->rounded_corner( $newimg );
                imagepng ( $tmp , $this ->dstimg);
            }
        }
        else
        //不裁图
        {
            if ( $ratio >= $resize_ratio )
            {
                $newimg  = imagecreatetruecolor( $this ->resize_width,( $this ->resize_width)/ $ratio );
                imagecopyresampled( $newimg $this ->im, 0, 0, 0, 0,  $this ->resize_width, ( $this ->resize_width)/ $ratio $this ->width,  $this ->height);
                ImageJpeg ( $newimg , $this ->dstimg);
            }
            if ( $ratio < $resize_ratio )
            {
                $newimg  = imagecreatetruecolor(( $this ->resize_height)* $ratio , $this ->resize_height);
                imagecopyresampled( $newimg $this ->im, 0, 0, 0, 0, ( $this ->resize_height)* $ratio $this ->resize_height,  $this ->width,  $this ->height);
                ImageJpeg ( $newimg , $this ->dstimg);
            }
        }
    }
    //初始化图象
    function  initi_img()
    {
        if ( $this ->type== "jpg" )
        {
            $this ->im = imagecreatefromjpeg( $this ->srcimg);
        }
        if ( $this ->type== "gif" )
        {
            $this ->im = imagecreatefromgif( $this ->srcimg);
        }
        if ( $this ->type== "png" )
        {
            $this ->im = imagecreatefrompng( $this ->srcimg);
        }
    }
    //处理圆角
    function  rounded_corner( $image , $size )
    {
    $this ->angle = 0;
    $topleft  = true;
    $bottomleft  = true;
    $bottomright  = true;
    $topright  = true;
    $corner_source  = imagecreatefrompng( 'rounded_corner.png' );
    $corner_width  = imagesx( $corner_source ); 
    $corner_height  = imagesy( $corner_source ); 
    $corner_resized  = ImageCreateTrueColor( $this ->corner_radius,  $this ->corner_radius);
    ImageCopyResampled( $corner_resized $corner_source , 0, 0, 0, 0,  $this ->corner_radius,  $this ->corner_radius,  $corner_width $corner_height );
    $corner_width  = imagesx( $corner_resized ); 
    $corner_height  = imagesy( $corner_resized ); 
    $white  = ImageColorAllocate( $image ,255,255,255);
    $black  = ImageColorAllocate( $image ,0,0,0);
    //顶部左圆角
    if  ( $topleft  == true) {
     $dest_x  = 0; 
     $dest_y  = 0; 
     imagecolortransparent( $corner_resized $black ); 
     imagecopymerge( $image $corner_resized $dest_x $dest_y , 0, 0,  $corner_width $corner_height , 100);
    }
    //下部左圆角
    if  ( $bottomleft  == true) {
     $dest_x  = 0; 
     $dest_y  $size  $corner_height
     $rotated  = imagerotate( $corner_resized , 90, 0);
     imagecolortransparent( $rotated $black ); 
     imagecopymerge( $image $rotated $dest_x $dest_y , 0, 0,  $corner_width $corner_height , 100); 
    }
    //下部右圆角
    if  ( $bottomright  == true) {
     $dest_x  $size  $corner_width
     $dest_y  $size  $corner_height
     $rotated  = imagerotate( $corner_resized , 180, 0);
     imagecolortransparent( $rotated $black ); 
     imagecopymerge( $image $rotated $dest_x $dest_y , 0, 0,  $corner_width $corner_height , 100); 
    }
    //顶部右圆角
    if  ( $topright  == true) {
     $dest_x  $size  $corner_width
     $dest_y  = 0;
     $rotated  = imagerotate( $corner_resized , 270, 0);
     imagecolortransparent( $rotated $black ); 
     imagecopymerge( $image $rotated $dest_x $dest_y , 0, 0,  $corner_width $corner_height , 100); 
    }
    $image  = imagerotate( $image $this ->angle,  $white );
    return  $image
    }
    //图象目标地址
    function  dst_img()
    {
        $full_length  strlen ( $this ->srcimg);
        $type_length  strlen ( $this ->type);
        $name_length  $full_length - $type_length ;
        $name          substr ( $this ->srcimg,0, $name_length -1);
        $this ->dstimg =  $name . "_small.png" ;
    }
}
//resizeimage("图片地址", "处理后的宽度", "处理后的高度", "是否裁剪", "圆角度数", "倾斜度");
$img_file  'Sunset.jpg' ;
$corner  'rounded_corner.png' ;
$resizeimage  new  resizeimage( $img_file $corner "80" "80" "1" "6" "0" );
?>
<img src= "small.png"  border= "0" >
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值