zoukankan      html  css  js  c++  java
  • PHP利用GD库处理图片方法实现

    这里写的是完成每个功能的函数,可以复制单个函数直接使用,这里的每个函数都是另外一篇PHP常用类------图片处理类Image当中的方法进行细化,可以参考一下

    废话不多说,直接付代码吧!

    添加水印(文字和图片)

    <?php 
    /**
     * [创建图片文字水印]
     * @param  [string] $imagename [需要添加水印的值]
     * @param  [string] $string    [图片上添加的文字]
     * @param  [string] $locate    [水印位置,center,left_buttom,right_buttom三选一]
     * @return [null]            [description]
     */
    function create_words_watermark($imagename,$string,$locate){
    	list($width,$height,$type)=getimagesize($imagename);
    	$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
    		4 => "SWF",5 => "PSD",6 => "BMP",
    		7 => "TIFF",8 => "TIFF",9 => "JPC",
    		10 => "JP2",11 => "JPX",12 => "JB2",
    		13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
    	$type=strtolower($types[$type]);
    	$create="imagecreatefrom".$type;
    	$img=$create($imagename);
    
    	$string_color=imagecolorallocate($img,200, 200, 200);
    	$fontsize=4;
    	
    	// 图片的宽和高也可用下面两个函数获得
    	// $width=imagesx($img);
    	// $height=imagesy($img);
    	
    	switch($locate){
    		case 'center':
    			$x=($width-imagefontwidth($fontsize)*strlen($string))/2;
    			$y=($height-imagefontheight($fontsize))/2;
    			break;
    		case 'left_buttom':
    			$x=5;
    			$y=($height-imagefontheight($fontsize)-3);
    			break;
    		case 'right_buttom':
    			$x=($width-imagefontwidth($fontsize)*strlen($string)-3);
    			$y=($height-imagefontheight($fontsize)-3);
     			break;
     		default:
     			die("未指定水印位置!");
     			break;
     	}
     	
    	imagestring($img,$fontsize,$x,$y,$string,$string_color);
    	imagestring($img,$fontsize,$x+1,$y+1,$string,$string_color);
    
    	$save="image".$type;
    	//保存
    	//$save($img,"new_".$imagename);
    	
    	//显示
    	header("content-type:image/".$type);
    	$save($img);
    	imagedestroy($img);
    }
    
    // create_words_watermark("test.png","hello world","right_buttom");
    
    /**
     * [create_pic_watermark 添加图片水印]
     * @param  [string] $dest_image [需要添加图片水印的图片名]
     * @param  [string] $watermark  [水印图片名]
     * @param  [string] $locate     [水印位置,center,left_buttom,right_buttom三选一]
     * @return [type]             [description]
     */
    function create_pic_watermark($dest_image,$watermark,$locate){
    	list($dwidth,$dheight,$dtype)=getimagesize($dest_image);
    	list($wwidth,$wheight,$wtype)=getimagesize($watermark);
    
    	$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
    		4 => "SWF",5 => "PSD",6 => "BMP",
    		7 => "TIFF",8 => "TIFF",9 => "JPC",
    		10 => "JP2",11 => "JPX",12 => "JB2",
    		13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
    
    	$dtype=strtolower($types[$dtype]);//原图类型
    	$wtype=strtolower($types[$wtype]);//水印图片类型
    
    	$created="imagecreatefrom".$dtype;
    	$createw="imagecreatefrom".$wtype;
    	
    	$imgd=$created($dest_image);
    	$imgw=$createw($watermark);
    
    	switch($locate){
    		case 'center':
    			$x=($dwidth-$wwidth)/2;
    			$y=($dheight-$wheight)/2;
    			break;
    		case 'left_buttom':
    			$x=1;
    			$y=($dheight-$wheight-2);
    			break;
    		case 'right_buttom':
    			$x=($dwidth-$wwidth-1);
    			$y=($dheight-$wheight-2);
     			break;
     		default:
     			die("未指定水印位置!");
     			break;
     	}
    
     	imagecopy($imgd,$imgw,$x,$y,0,0, $wwidth,$wheight);
    
     	$save="image".$dtype;
    
     	//显示
     	header("content-type:image/".$dtype);
     	$save($imgd);
    
     	imagedestroy($imgw);
     	imagedestroy($imgd);
    }
    
    create_pic_watermark("ganlixin.jpg","test.png","left_buttom");
    ?>
    

    剪切图片

    <?php 
    /**
     * [cut_image]					从原图中剪切一部分
     * @param  [string] $old_imagename [需要剪切的图片名]
     * @param  [int] $start_width   [从原图片宽为的$start_width开始剪切]
     * @param  [int] $start_height  [从原图片高为的$start_height开始剪切]
     * @param  [int] $new_width     [从原图片中剪切$new_width的宽度]
     * @param  [int] $new_height    [从原图片中剪切$new_height的高度]
     * @return [null]                [null]
     */
    function cut_image($old_imagename,$start_width,$start_height,$new_width,$new_height){
    	list($old_width,$old_height,$type)=getimagesize($old_imagename);
    	$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
    		4 => "SWF",5 => "PSD",6 => "BMP",
    		7 => "TIFF",8 => "TIFF",9 => "JPC",
    		10 => "JP2",11 => "JPX",12 => "JB2",
    		13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
    	$type=strtolower($types[$type]);
    	$create="imagecreatefrom".$type;
    
    	$old_img=$create($old_imagename);
    	$new_img=imagecreatetruecolor($new_width, $new_height);
    
    	imagecopyresampled($new_img,$old_img,0,0,$start_width,$start_height,$new_width,$new_height,$new_width,$new_height);
    	$save="image".$type;
    
    	//保存
    	//$save($new_img,"new_".$old_imagename);
    	
    	//显示
    	header("content-type:image/".$type);
    	$save($new_img);
    
    	//销毁
    	imagedestroy($old_img);
    	imagedestroy($new_img);
    }
    
    cut_image("ganlixin.jpg",0,0,200,200);
    ?>
    

      

    翻转图片

    <?php 
    /**
     * [rotate_image 图片旋转]
     * @param  [string] $imagename [要进行旋转的图片名]
     * @param  [string] $angle     [旋转的角度,逆时针为正]
     * @return [null]            [description]
     */
    function rotate_image($imagename,$angle){
    	list($width,$height,$type)=getimagesize($imagename);
    	$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
    		4 => "SWF",5 => "PSD",6 => "BMP",
    		7 => "TIFF",8 => "TIFF",9 => "JPC",
    		10 => "JP2",11 => "JPX",12 => "JB2",
    		13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
    	$type=$types[$type];
    
    	$create="imagecreatefrom".$type;
    	$img=$create($imagename);
    	$new_img=imagerotate($img,$angle,0);
    	$save="image".$type;
    
    	//显示
    	header("content-type:image/".$type);
    	$save($new_img);
    
    	// 保存
    	// $save($new_img,"new_".$imagename);
    
    	imagedestroy($img);
    	imagedestroy($new_img);
    } 
    
    rotate_image("ganlixin.jpg",-90);
    
    ?>
    

      

    翻转图片

    <?php 
    /**
     * [overturn_image 翻转图片]
     * @param  [string] $imagename [要反转的图片名]
     * @param  [char] $method    [按x轴或y轴翻转,只有x,y选项]
     * @return [type]            [description]
     */
    function overturn_image($imagename,$method){
    	$method=strtolower($method);
    	list($width,$height,$type)=getimagesize($imagename);
    	$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
    		4 => "SWF",5 => "PSD",6 => "BMP",
    		7 => "TIFF",8 => "TIFF",9 => "JPC",
    		10 => "JP2",11 => "JPX",12 => "JB2",
    		13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
    	$type=$types[$type];
    
    	$create="imagecreatefrom".$type;
    	$img=$create($imagename);//源图片
    	$new_img=imagecreatetruecolor($width,$height);//翻转之后的图片
    
    	if($method=='y'){
    		for($i=0;$i<$width;$i++){
    			imagecopy($new_img,$img,$width-$i-1,0,$i,0,1,$height);
    		}
    	} else if($method=='x'){
    		for($i=0;$i<$height;$i++){
    			imagecopy($new_img,$img,0,$height-$i-1,0,$i,$width,1);
    		}
    	}
    	$save="image".$type;
    
    	//显示
    	header("content-type:image/".$type);
    	$save($new_img);
    
    	// 保存
    	// $save($new_img,"new_".$imagename);
    
    	imagedestroy($img);
    	imagedestroy($new_img);
    }
    overturn_image("ganlixin.jpg","y");
    ?>
    

      

  • 相关阅读:
    JVM调优-Java中的对象
    Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装
    Navicat for MySQL 64位破解版
    Idea详细配置
    数据库--悲观锁【收藏,待尝试】
    性能问题分析
    java 反射机制之 getDeclaredMethod()获取方法,然后invoke执行实例对应的方法
    Mysql show indexes 查看索引状态
    基于(Redis | Memcache)实现分布式互斥锁
    彻底解决每次打开visio都提示windows正在配置visio的问题
  • 原文地址:https://www.cnblogs.com/-beyond/p/7218226.html
Copyright © 2011-2022 走看看