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

请看代码:list($maintype,$subtype)=explode("/",$_FILES['upload']['type']);
		functionset_thumb($width,$height){
			$thumb_width=$width;
	$thumb_height=$height;
	}
	//创建缩略图,以相同的扩展名生成缩略图
	//$src_file:来源图像路径,$thumb_file:缩略图路径
	functioncreate_thumb($src_file,$thumb_file){
		$t_width=$thumb_width;
	$t_height=$thumb_height;
	if(!file_exists($src_file))returnfalse;
	$src_info=getImageSize($src_file);
	//如果来源图像小于或等于缩略图则拷贝源图像作为缩略图,免去操作
	if($src_info[0]<=$t_width&&$src_info[1]<=$t_height){
	if(!copy($src_file,$thumb_file)){
		returnfalse;
	}
	returntrue;
	}
	//按比例计算缩略图大小
	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);
	returntrue;
	}我是这么调用的:$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"";
				echo"alert('不能移动到指定目录!');";
				echo"window.history.go(-1);";
				echo"";
				exit();
			}
			@unlink($_FILES['upload']['tmp_name']);
			set_thumb(100,80);
			if(create_thumb($upfile,$thumb_file)){
				$thumbfile=$thumb_file;
			}
...//中间省略一些数据库操作代码数据库里有缩略图的路径,但文件夹里面没有生成缩略图
慕哥6287543
浏览 384回答 2
2回答

守着一只汪

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

弑天下

imagick不解释
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript