Home > Backend Development > PHP Tutorial > imagecopyresampled对图像采样压缩jpg正常,png采样后变成0字节,系统也无法打开

imagecopyresampled对图像采样压缩jpg正常,png采样后变成0字节,系统也无法打开

WBOY
Release: 2016-06-20 12:36:27
Original
1600 people have browsed it

imagecopyresampled对图像采样压缩jpg正常,png采样后变成0字节,系统也无法打开,代码如下:

 $width = 200;$height = 200;header("Content-Type: {$data['file_type']}");           /// [file_type] => image/pnglist($width_orig, $height_orig) = getimagesize(".{$data['full_file_path']}");   //图片路径$ratio_orig = $width_orig/$height_orig;if ($width/$height > $ratio_orig) {	 $width = $height*$ratio_orig;	} else {  $height = $width/$ratio_orig;	}				// 重新取样$image_p = imagecreatetruecolor($width, $height);$image = imagecreatefromjpeg(".{$data['full_file_path']}");$push = "image".$data['image_type'];imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);$push($image_p, $data['min_im'], 100);imagedestroy($image_p); imagedestroy($image);
Copy after login

jpg格式图形采样后正常 ,唯独png 采样压缩有变成这样:


回复讨论(解决方案)

请贴全你的代码

第14行格式png时应该用imagecreatefrompng()
你的程序没做判断?

第14行格式png时应该用imagecreatefrompng()
你的程序没做判断?


Copy after login

不好意思,代码没有上最新的:
	//重新对图片采样,平滑插入像素值  	function upload_headimg($file='file') {				$path = getpath();		if(empty($path)){			return '';		}		$config['upload_path'] = $path;		$config['allowed_types'] = 'jpg|jpeg|gif|png';		$config['max_size'] = '10240';		$config['file_name'] = 'wj_'.time().mt_rand(1000, 9999);		$config['file_ext_tolower'] = TRUE;		$CI = &get_instance();		$CI->load->library('upload', $config);				$res =  $CI->upload->do_upload($file);		if($res){			$data = $CI->upload->data();			$path = ltrim($path,'.');			$data['full_file_path'] = $path.'/'.$data['file_name'];			$data['min_im'] = '.'.$path.'/min'.$data['file_name'];			$width = 200;			$height = 200;			header("Content-Type: {$data['file_type']}");			list($width_orig, $height_orig) = getimagesize(".{$data['full_file_path']}");			$ratio_orig = $width_orig/$height_orig;						if ($width/$height > $ratio_orig) {			   $width = $height*$ratio_orig;			} else {			   $height = $width/$ratio_orig;			}						// 重新取样			$image_p = imagecreatetruecolor($width, $height);			$create_im ="imagecreatefrom".$data['image_type'];			$image = $create_im(".{$data['full_file_path']}");			$push = "image".$data['image_type'];			imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);			$push($image_p, $data['min_im'], 100);			imagedestroy($image_p);        	imagedestroy($image);			//exit;			return $data;											}else{			return $CI->upload->display_errors();		}		}
Copy after login
Copy after login

请贴全你的代码


	//重新对图片采样,平滑插入像素值  	function upload_headimg($file='file') {				$path = getpath();		if(empty($path)){			return '';		}		$config['upload_path'] = $path;		$config['allowed_types'] = 'jpg|jpeg|gif|png';		$config['max_size'] = '10240';		$config['file_name'] = 'wj_'.time().mt_rand(1000, 9999);		$config['file_ext_tolower'] = TRUE;		$CI = &get_instance();		$CI->load->library('upload', $config);				$res =  $CI->upload->do_upload($file);		if($res){			$data = $CI->upload->data();			$path = ltrim($path,'.');			$data['full_file_path'] = $path.'/'.$data['file_name'];			$data['min_im'] = '.'.$path.'/min'.$data['file_name'];			$width = 200;			$height = 200;			header("Content-Type: {$data['file_type']}");			list($width_orig, $height_orig) = getimagesize(".{$data['full_file_path']}");			$ratio_orig = $width_orig/$height_orig;						if ($width/$height > $ratio_orig) {			   $width = $height*$ratio_orig;			} else {			   $height = $width/$ratio_orig;			}						// 重新取样			$image_p = imagecreatetruecolor($width, $height);			$create_im ="imagecreatefrom".$data['image_type'];			$image = $create_im(".{$data['full_file_path']}");			$push = "image".$data['image_type'];			imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);			$push($image_p, $data['min_im'], 100);			imagedestroy($image_p);        	imagedestroy($image);			//exit;			return $data;											}else{			return $CI->upload->display_errors();		}		}
Copy after login
Copy after login

找到原因了第40行
$push($image_p, $data['min_im'], 100);
第三个参数 函数为imagepng时范围为0-9
imagejpeg时范围为0-100

Regarding suggestions to rescale the 0-99 quality range of jpeg into the 0-9 range of png, note that for jpeg 99 is minimum compression (maximum quality) while for png 9 is maximum compression (quality doesn't change).

找到原因了第40行
$push($image_p, $data['min_im'], 100);
第三个参数 函数为imagepng时范围为0-9
imagejpeg时范围为0-100



谢谢您,这个问题已经解决了,请问能在保存压缩好的图片后不在浏览器输出吗?我只想直接返回数组,但却总是在浏览器里生成一个20X20的图形并停止运行下去
			// 重新取样			$image_p = imagecreatetruecolor($width, $height);			$create_im ="imagecreatefrom".$data['image_type'];			$image = $create_im(".{$data['full_file_path']}");			$push = "image".$data['image_type'];			imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);			switch ($data['image_type']) {				case 'jpeg':					$status = $push($image_p, $data['min_im'], 100);					break;				case 'png':					$status = $push($image_p, $data['min_im'], 9);					break;				default:					$status = $push($image_p, $data['min_im']);					break;			}						imagedestroy($image_p);        	imagedestroy($image);			return $data;
Copy after login

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template