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

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

WBOY
WBOYOriginal
2016-06-20 12:36:271580Durchsuche

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);

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


回复讨论(解决方案)

请贴全你的代码

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

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


  
不好意思,代码没有上最新的:
	//重新对图片采样,平滑插入像素值  	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();		}		}

请贴全你的代码


	//重新对图片采样,平滑插入像素值  	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();		}		}

找到原因了第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;
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:《PHP核心技术与最佳实践》笔记Nächster Artikel:PHP session回收