• 技术文章 >php教程 >php手册

    php生成图片缩略图的函数

    2016-06-13 09:34:28原创664
    具体用法如下:

    $a=thumbImage('1.jpg',200,100,'2.jpg');//将1.jpg生成宽为200,高为100的缩略图,并保存为2.jpg
    print_r($a);

    打印结果:

    Array(
        [status] => 0
        [file] => 1.jpg
        [width] => 200
        [height] => 200
        [savePath] => 2.jpg
        [info] => 缩略图片生成成功
    )

    $a=thumbImage('1.jpg',200,100);//将1.jpg生成宽为200,高为100的缩略图,并直接覆盖1.jpg,不生成新图片

    函数代码如下:

    0,'file'=>'','width'=>0,'height'=>0,'savePath'=>'','info'=>'');
    	if(!file_exists($file)){
    		return array('status'=>1,'file'=>'','width'=>0,'height'=>0,'savePath'=>'','info'=>'图片文件不存在');
    	}
    	//检测文件类型
    	$fp=fopen($file,'rb');
    	$str=fread($fp,2); //只读2字节
    	fclose($fp);
    	$str=@unpack("c2chars",$str);
    	$typeCode=intval($str['chars1'].$str['chars2']);
    	$fileType='';
    	switch($typeCode){
    		case 255216:
    			$fileType='jpg';
    		break;
    		case 7173:
    			$fileType='gif';
    		break;
    		case 6677:
    			$fileType='bmp';
    		break;
    		case 13780:
    			$fileType='png';
    		break;
    		default:
    			$fileType=$typeCode;
    		break;
    	}
    	if($str['chars1']=='-1'&&$str['chars2']=='-40'){
    		$fileType='jpg';
    	}
    	if($str['chars1']=='-119'&&$str['chars2']=='80'){
    		$fileType='png';
    	}
    	if(!in_array($fileType,array('jpg','gif','bmp','png'))){
    		return array('status'=>2,'file'=>'','width'=>0,'height'=>0,'savePath'=>'','info'=>'图片文件类型不正确:'.$fileType);
    	}
    	//图片缩放处理
    	if($fileType=='jpg'){
    		$im=imagecreatefromjpeg($file);
    	}
    	if($fileType=='gif'){
    		$im=imagecreatefromgif($file);
    	}
    	if($fileType=='png'){
    		$im=imagecreatefrompng($file);
    	}
    	if(empty($savePath))
    	$savePath=$file;
    	$width=imagesx($im);
    	$height=imagesy($im);
    	if($width<$thumbWidth&&$height<$thumbHeight){
    		return array('status'=>3,'file'=>'','width'=>0,'height'=>0,'savePath'=>'','info'=>'图片尺寸小于生成缩略图的尺寸');
    	}
    	$ratio=$width/$height;//实际图象的比例
    	$thumbRatio=$thumbWidth/$thumbHeight;//改变后的图象的比例
    	if($isCut){//裁切处理
    		if(function_exists('imagepng')&&(str_replace('.','',PHP_VERSION)>=512)){//针对php版本大于5.12参数变化后的处理情况
    			$quality=9;
    		}
    		if($ratio>=$thumbRatio){//高度优先
    			$newimg=imagecreatetruecolor($thumbWidth,$thumbHeight);
    			imagecopyresampled($newimg,$im,0,0,0,0,$thumbWidth,$thumbHeight,(($height)*$thumbRatio),$height);
    			imagejpeg($newimg,$savePath,$quality);
    		}
    		if($ratio<$thumbRatio){//宽度优先
    			$newimg=imagecreatetruecolor($thumbWidth,$thumbHeight);
    			imagecopyresampled($newimg,$im,0,0,0,0,$thumbWidth,$thumbHeight,$width,(($width)/$thumbRatio));
    			imagejpeg($newimg,$savePath,$quality);
    		}
    	}else{//不裁切处理
    		if($ratio>=$thumbRatio){
    			$newimg=imagecreatetruecolor($thumbWidth,($thumbWidth)/$ratio);
    			imagecopyresampled($newimg,$im,0,0,0,0,$thumbWidth,($thumbWidth)/$ratio,$width,$height);
    			imagejpeg($newimg,$savePath,$quality);
    		}
    		if($ratio<$thumbRatio){
    			$newimg=imagecreatetruecolor(($thumbHeight)*$ratio,$thumbHeight);
    			imagecopyresampled($newimg,$im,0,0,0,0,($thumbHeight)*$ratio,$thumbHeight,$width,$height);
    			imagejpeg($newimg,$savePath,$quality);
    		}
    	}
    	ImageDestroy($im);//www.phpernote.com/php-function/1007.html
    	return array('status'=>0,'file'=>$file,'width'=>$thumbWidth,'height'=>$thumbHeight,'savePath'=>$savePath,'info'=>'缩略图片生成成功');
    }

    您可能感兴趣的文章

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 图片缩略图 函数
    上一篇:利用谷歌 Translate API制作自己的翻译脚本 下一篇:php伪静态之APACHE篇
    千万级数据并发解决方案

    相关文章推荐

    • gd库图片下载类实现下载网页所有图片的php代码• PHP将DateTime对象转化为友好时间显示的实现代码• PHP+XML 制作简单的留言本 图文教程• php下几个常用的去空、分组、调试数组函数• 轻松修复Discuz!数据库
    1/1

    PHP中文网