首页 后端开发 php教程 PHP创建缩略图造成图片质量低上的完美解决办法

PHP创建缩略图造成图片质量低上的完美解决办法

Jun 13, 2016 pm 01:05 PM
height img name width

PHP创建缩略图造成图片质量低下的完美解决方法

近期弄个论坛,在首页要有个排名,显示评论最多的前十位用户的列表,列表有个略图是用户最新上传的作品,如果使用原来的图,图片过大,首页加载过慢,因此要使用略图

以上来使用imagecopyresized这个函数,显示质量很差如图

后来改用imagecopyresampled效果明显改变效果如图

付上完整代码

/**
* @name	thum 	缩略图函数
* @param	sting	$img_name	图片路径
* @param	int		$max_width	略图最大宽度
* @param	int		$max_height	略图最大高度
* @param	sting	$suffix 略图后缀(如"img_x.jpg"代表小图,"img_m.jpg"代表中图,"img_l.jpg"代表大图)
* @return	void
*/
function thum($img_name,$max_width,$max_height,$suffix){
		$img_infos=getimagesize($img_name);
		$img_height=$img_infos[0];//图片高
		$img_width=$img_infos[1];//图片宽
		$img_extension='';//图片后缀名
		switch($img_infos[2]){
			case 1:
				$img_extension='gif';
				break;
			case 2:
				$img_extension='jpeg';
				break;
			case 3:
				$img_extension='png';
				break;
			default:
				$img_extension='jpeg';
				break;
			}
		$new_img_size=get_thum_size($img_width,$img_height,$max_width,$max_height);//新的图片尺寸
		
		
		//print_r($new_img_size);
		//die('test');
		$img_func='';//函数名称
		$img_handle='';//图片句柄
		$thum_handle='';//略图图片句柄
		switch($img_extension){
			case 'jpg':
				$img_handle=imagecreatefromjpeg($img_name);
				$img_func='imagejpeg';
				break;
			case 'jpeg':
				$img_handle=imagecreatefromjpeg($img_name);
				$img_func='imagejpeg';
				break;
			case 'png':
				$img_handle=imagecreatefrompng($img_name);
				$img_func='imagepng';
				break;
			case 'gif':
			 	$img_handle=imagecreatefromgif($img_name);
				$img_func='imagegif';
				break;
			default:
				$img_handle=imagecreatefromjpeg($img_name);
				$img_func='imagejpeg';
				break;
			}
		/****/	
		$quality=100;//图片质量
		if($img_func==='imagepng' && (str_replace('.', '', PHP_VERSION)>= 512)){//针对php版本大于5.12参数变化后的处理情况
			$quality=9;
			} 
		/****/
		$thum_handle=imagecreatetruecolor($new_img_size['height'],$new_img_size['width']);
		if(function_exists('imagecopyresampled')){
			imagecopyresampled($thum_handle,$img_handle, 0, 0, 0, 0,$new_img_size['height'],$new_img_size['width'],$img_height,$img_width);
			}else{
				imagecopyresized($thum_handle,$img_handle, 0, 0, 0, 0,$new_img_size['height'],$new_img_size['width'],$img_height,$img_width);
			}
        call_user_func_array($img_func,array($thum_handle,get_thum_name($img_name,$suffix),$quality));
		imagedestroy($thum_handle);//清除句柄
        imagedestroy($img_handle);//清除句柄
	}

/**
* @name get_thum_size 获得缩略图的尺寸
* @param	$width	图片宽
* @param    $height 图片高
* @param	$max_width 最大宽度
* @param	$maxHeight 最大高度
* @param	array $size;
*/
function get_thum_size($width,$height,$max_width,$max_height){
	$now_width=$width;//现在的宽度
	$now_height=$height;//现在的高度
	$size=array();
	if($now_width>$max_width){//如果现在宽度大于最大宽度
		$now_height*=number_format($max_width/$width,4);
		$now_width=	$max_width;
		}
	if($now_height>$max_height){//如果现在高度大于最大高度
		$now_width*=number_format($max_height/$now_height,4);
		$now_height=$max_height;
		}
	$size['width']=floor($now_width);
	$size['height']=floor($now_height);
	return $size;
	}

/**
*@ name 	get_thum_name 获得略图的名称(在大图基础加_x)
*/
function get_thum_name($img_name,$suffix){
		$str=explode('#',$img_name);
		$str1=explode('.',$str[1]);
		return $str[0].'_'.$suffix.'.'.$str1[1];
	}
登录后复制



本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
两个点博物馆:所有展览以及在哪里可以找到它们
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
两个点博物馆:所有展览以及在哪里可以找到它们
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

img文件怎么打开 img文件怎么打开 Sep 18, 2023 am 09:40 AM

img文件怎么打开

img文件如何打开 img文件如何打开 Jul 06, 2023 pm 04:17 PM

img文件如何打开

img是什么格式 img是什么格式 Mar 17, 2023 am 10:33 AM

img是什么格式

html的width是什么意思 html的width是什么意思 Jun 03, 2021 pm 02:15 PM

html的width是什么意思

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决

u盘pe读不出img u盘pe读不出img Mar 19, 2024 pm 12:07 PM

u盘pe读不出img

CSS 维度属性详解:height 和 width CSS 维度属性详解:height 和 width Oct 21, 2023 pm 12:42 PM

CSS 维度属性详解:height 和 width

css表示width值有哪些方法 css表示width值有哪些方法 Nov 13, 2023 pm 05:47 PM

css表示width值有哪些方法

See all articles