• 图片处理类


    有获得图片的宽,高,后缀的函数,有等比例缩略图的函数,有添加水印的函数,有产生验证码的函数

    <?php
    defined('ACC')||exit('无权访问');
    //图片处理类
    class ImageTool{
    	//imageInfo分析图片的信息
    	//return array
    	public static function imageInfo($image){
    		//判断图片是否存在
    		if(!file_exists($image)){
    			return false;
    		}
    
    		$info=getimagesize($image);
    
    		if($info==false){
    			return false;
    		}
    
    		$img['width']=$info[0];
    		$img['height']=$info[1];
    		$img['ext']=substr($info['mime'],strpos($info['mime'],'/')+1);
    
    		return $img;
    	}
    	
    	//加水印功能
    	//water(原图,水印图,替换原图或新图路径,水印位置,透明度);
    	public static function water($dst,$water,$save=null,$pos=2,$alpha=50){
    		//是否存在
    		if(!file_exists($dst)||!file_exists($water)){
    			return false;
    		}
    
    		//图片信息
    		$dinfo=self::imageInfo($dst);
    		$winfo=self::imageInfo($water);
    
    		if($winfo['height']>$dinfo['height']||$winfo['width']>$dinfo['width']){
    			return false;
    		}
    
    		//获得函数名
    		$dfunc='imagecreatefrom'.$dinfo['ext'];
    		$wfunc='imagecreatefrom'.$winfo['ext'];
    
    		//判断方法是否存在
    		if(!function_exists($dfunc)||!function_exists($wfunc)){
    			return false;
    		}
    
    		//创建画布
    		$dim=$dfunc($dst);
    		$wim=$wfunc($water);
    
    		//计算水印位置坐标
    		switch($pos){
    			case 0://左上角
    			$posx=0;
    			$posy=0;
    			break;
    			case 1://右上角
    			$posx=$dinfo['width']-$winfo['width'];
    			$posy=0;
    			break;
    			case 2://左下角
    			$posx=0;
    			$posy=$dinfo['height']-$winfo['height'];
    			break;
    			default://右下角
    			$posx=$dinfo['width']-$winfo['width'];
    			$posy=$dinfo['height']-$winfo['height'];
    		}
    
    		imagecopymerge($dim,$wim,$posx,$posy,0,0,$winfo['width'],$winfo['height'],$alpha);
    
    		//保存
    		if(!$save){
    			$save=$dst;
    			unlink($dst);//删除原图
    		}
    
    		$createfunc='image'.$dinfo['ext'];
    		$createfunc($dim,$save);
    
    		imagedestroy($dim);
    		imagedestroy($wim);
    
    		return true;
    	}
    
    	//thumb生成缩略图,等比缩放,留白
    	public static function thumb($dst,$save=null,$width=200,$height=200){
    		//判断原图是否存在
    		$dinfo=self::imageInfo($dst);
    		if($dinfo==false){
    			return false;
    		}
    		//计算缩放比例
    		$calc=min($width/$dinfo['width'],$height/$dinfo['height']);
    
    		//创建原始图画布
    		$dfunc='imagecreatefrom'.$dinfo['ext'];
    		$dim=$dfunc($dst);
    
    		//创建缩略图画布
    		$tim=imagecreatetruecolor($width,$height);
    		
    		//创建白色
    		$white=imagecolorallocate($tim,255,255,255);
    
    		imagefill($tim,0,0,$white);
    		//复制并缩略
    		$dwidth=(int)$dinfo['width']*$calc;
    		$dheight=(int)$dinfo['height']*$calc;
    
    		$paddingx=(int)($width-$dwidth)/2;
    		$paddingy=(int)($height-$dheight)/2;
    
    		imagecopyresampled($tim,$dim,$paddingx,$paddingy,0,0,$dwidth,$dheight,$dinfo['width'],$dinfo['height']);
    
    		//保存
    		if(!$save){
    			$save=$dst;
    			unlink($dst);
    		}
    
    		$createfunc='image'.$dinfo['ext'];
    		$createfunc($tim,$save);
    
    		imagedestroy($tim);
    		imagedestroy($dim);
    
    		return true;
    	}
    
    	public static function code($width=50,$height=30){
    		$rs=imagecreatetruecolor($width,$height);//创建画布资源
    		$gray=imagecolorallocate($rs, 100, 100, 100);
    
    		$fontcolor=imagecolorallocate($rs, mt_rand(150,255), mt_rand(150,255), mt_rand(150,255));
    
    		$linecolor1=imagecolorallocate($rs, mt_rand(100,200), mt_rand(100,200), mt_rand(100,200));
    		$linecolor2=imagecolorallocate($rs, mt_rand(100,200), mt_rand(100,200), mt_rand(100,200));
    		$linecolor3=imagecolorallocate($rs, mt_rand(100,200), mt_rand(100,200), mt_rand(100,200));
    
    		//填充颜色
    		imagefill($rs, 0, 0, $gray);
    
    		//随机字符串
    		$str=substr(str_shuffle('ABCDEFGHJKMNOPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789'),0,4);
    
    		//书写字符串
    		imagestring($rs, 5, 8, 5, $str, $fontcolor);
    
    		//画干扰线
    		imageline($rs,0,mt_rand(0,30),50,mt_rand(0,30),$linecolor1);
    		imageline($rs,0,mt_rand(0,30),50,mt_rand(0,30),$linecolor2);
    		imageline($rs,0,mt_rand(0,30),50,mt_rand(0,30),$linecolor3);
    
    		//输出
    		header('content-type:image/png');
    		imagepng($rs);
    		//销毁
    		imagedestroy($rs);
    		return $str;
    	} 
    }	
    
    
    ?>
    
  • 相关阅读:
    为什么lambda中用到的局部变量需要为final
    ubuntu安装idea之后字体不友好
    mysql存表情出错的解决方案(类似xF0x9Fx98x86xF0x9F)
    CentOS7.4 安装mysql
    mysql修改时区
    发个自己写的微信小游戏
    算法:IP分割问题(python实现)
    教你用Python抓取百度翻译
    教你用Python遍历指定目录下的所有文件以及文件的过滤
    教你用Python做个简单的加密程序(还基础什么呀,直接来练习吧,带源码)
  • 原文地址:https://www.cnblogs.com/lzzhuany/p/4797559.html
Copyright © 2020-2023  润新知