首页 > 开发 > php > 正文

用php生成上传图片的缩略图问题

2017-09-06 15:06:58  来源:网友分享

请看代码:

list($maintype,$subtype)=explode("/", $_FILES['upload']['type']);		function set_thumb ($width, $height) {      			$thumb_width  = $width;              	$thumb_height = $height;          	}     	//创建缩略图,以相同的扩展名生成缩略图          	//$src_file : 来源图像路径 , $thumb_file : 缩略图路径          	function create_thumb ($src_file,$thumb_file) {             		 $t_width  = $thumb_width;              	 $t_height = $thumb_height;              	if (!file_exists($src_file)) return false;              	$src_info = getImageSize($src_file);              	//如果来源图像小于或等于缩略图则拷贝源图像作为缩略图,免去操作              	if ($src_info[0] <= $t_width && $src_info[1] <= $t_height) {                  	if (!copy($src_file,$thumb_file)) {                     	 	return false;                  	}                  	return true;              	}                    	//按比例计算缩略图大小              	if (($src_info[0]-$t_width) > ($src_info[1]-$t_height)) {                  	$t_height = ($t_width / $src_info[0]) * $src_info[1];             	 	} else {                  	$t_width = ($t_height / $src_info[1]) * $src_info[0];              	}                       	switch ($subtype) {                  	case 'jpg' :                      	$src_img = ImageCreateFromJPEG($src_file); break;                  	case 'png' :                      	$src_img = ImageCreateFromPNG($src_file); break;                  	case 'gif' :                      	$src_img = ImageCreateFromGIF($src_file); break;              	}              	//创建一个真彩色的缩略图像              	$thumb_img = @ImageCreateTrueColor($t_width,$t_height);              	//ImageCopyResampled函数拷贝的图像平滑度较好,优先考虑              	if (function_exists('imagecopyresampled')) {                  	@ImageCopyResampled($thumb_img,$src_img,0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);              	} else {                  	@ImageCopyResized($thumb_img,$src_img,0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);              	}              	//生成缩略图              	switch ($subtype) {                  	case 'jpg' :                      	ImageJPEG($thumb_img,$thumb_file); break;                  	case 'gif' :                     	 	ImageGIF($thumb_img,$thumb_file); break;                  	case 'png' :                      	ImagePNG($thumb_img,$thumb_file); break;              	}              	//销毁临时图像      			@ImageDestroy($src_img);              	@ImageDestroy($thumb_img);        	return true;          	}

我是这么调用的:

$upfile='uploads/'.rand(0,10000).date('YmdHis').iconv("utf8", "UTF-8", $_FILES['upload']['name']);		$thumb_file='uploads/'.'thumb_'.rand(0,10000).date('YmdHis').iconv("utf8", "UTF-8", $_FILES['upload']['name']);        if(is_uploaded_file($_FILES['upload']['tmp_name'])){						if(!move_uploaded_file($_FILES['upload']['tmp_name'], $upfile)){				echo "<script language='javascript'>";				echo "alert('不能移动到指定目录!');";				echo "window.history.go(-1);";				echo "</script>";				exit();			}			@unlink($_FILES['upload']['tmp_name']);			set_thumb(100,80);			if(create_thumb($upfile,$thumb_file)){				$thumbfile=$thumb_file;			}         ...//中间省略一些数据库操作代码

数据库里有缩略图的路径,但文件夹里面没有生成缩略图

解决方案

谢谢大家的回答 我后来检查了一遍代码发现是iconv("utf8", "UTF-8", $_FILES['upload']['name'])这句代码惹的祸,它直接把图片的后缀名给去掉了,所以导致后面的create_thumb()函数不能成功生成缩略图,再次感谢大家的帮助。