php水印处理类中级篇

<?php

class imgwater{
    
    static $imgtype = array('jpeg','jpg','gif','bmp');
    
    
    private function checkimg($filename){
        $filename = trim($filename);
        if(!$filename){
            return false;
        }
        
        $img_exe = self::file_type($filename);
        if(!in_array($img_exe,self::$imgtype)){
            return -2;
        }
        return 1;
    }
    
    
    private function add_water($source,$water,$newimg){
        $source = trim($source);
        $water    = trim($water);
        $newimg = trim($newimg);
        if(!$source || !$water){
            return false;
        }
        
        $exe     = self::file_type($source);
        if(!$newimg){
            $pre     = time()."newsource";
            $newimg    = $pre.".".$exe;  
        }
        
        $im        = imagecreatefromjpeg($source);
        $img2    = imagecreatefrompng($water);
        
        //取得各自的长宽,计算位置
        $im_WH    = getimagesize($source);
        $im_W    = $im_WH[0];
        $im_H    = $im_WH[1];
        
        $img2_WH= getimagesize($water);
        $img2_W = $img2_WH[0];
        $img2_H = $img2_WH[1];
        
        //定义存放的位置
        $NewX    = $im_W-$img2_W;
        $NewY    = $im_H-$img2_H;
        //填充
        imagecopy($im,$img2,$NewX,$NewY,0,0,$img2_W,$img2_H);
        //header("Content-type:image/jpeg");
        @unlink($newimg);
        switch ($exe){
            case 'jpg':
                imagejpeg($im,$newimg);break;
            case 'jpeg':
                imagejpeg($im,$newimg);break;
            case 'gif':
                imagegif($im,$newimg);break;
        }
    }
    
    
    private function file_type($filename){  
        $file        = fopen($filename, "rb");  
        $bin        = fread($file, 2); //只读2字节  
        fclose($file);  
        $strInfo    = @unpack("C2chars", $bin);  
        $typeCode    = intval($strInfo['chars1'].$strInfo['chars2']);  
        $fileType    = '';  
        switch ($typeCode){  
            case 7790:  
                $fileType = 'exe';  
                break;  
            case 7784:  
                $fileType = 'midi';  
                break;  
            case 8297:  
                $fileType = 'rar';  
                break;          
            case 8075:  
                $fileType = 'zip';  
                break;  
            case 255216:  
                $fileType = 'jpg';  
                break;  
            case 7173:  
                $fileType = 'gif';  
                break;  
            case 6677:  
                $fileType = 'bmp';  
                break;  
            case 13780:  
                $fileType = 'png';  
                break;  
            default:  
                $fileType = 'unknown: '.$typeCode;  
        }
        //Fix
        if ($strInfo['chars1']=='-1' AND $strInfo['chars2']=='-40' ) return 'jpg';
        if ($strInfo['chars1']=='-119' AND $strInfo['chars2']=='80' ) return 'png';
        return $fileType;  
    }
        
    public function waterimg($filename,$waterimg,$newimg){

        $filename    = trim($filename);
        $waterimg    = trim($waterimg);
        $newimg         = trim($newimg);          
        if(!$filename ||!$waterimg){
            return false;
        }
        $exerst = self::checkimg($filename);
        if($exerst==1){
            //加水印处理
            self::add_water($filename,$waterimg,$newimg);
        }
    }
}

$waterclass = new imgwater();

$imglist = array('1.jpg','2.jpg','3.jpg');
foreach($imglist as $key=>$value){
    $waterclass->waterimg($value,"yin.png","");
    sleep(3);
}
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值