欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-06-08 18:48:25
...
请看代码:
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]  ($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 "";
				exit();
			}
			@unlink($_FILES['upload']['tmp_name']);
			set_thumb(100,80);
			if(create_thumb($upfile,$thumb_file)){
				$thumbfile=$thumb_file;
			} 
        ...//中间省略一些数据库操作代码

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

回复内容:

请看代码:

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]  ($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 "";
				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()函数不能成功生成缩略图,再次感谢大家的帮助。

imagick不解释

相关标签: php