ホームページ >バックエンド開発 >PHPチュートリアル >エイリアスを使用せずにphpでアップロードされた画像の品質を向上させるにはどうすればよいですか?

エイリアスを使用せずにphpでアップロードされた画像の品質を向上させるにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-23 14:01:211452ブラウズ

質問と同じように、うるさいデザイナーに直面すると、アップロードされた写真にはエイリアスが付いていると言われました (追記: よくわかりません! = =)

専門家の方、写真をアップロードする際の画質を改善するにはどうすればよいですか?エイリアシングはありませんか?


ディスカッション(解決策)への返信

アップロードは単なるコピーであり、画質には影響しません
もちろん、GDを使用して操作する場合は別問題です

アップロードは単なるコピーですコピーしても、画質には影響しません
もちろん、GD を使用して操作する場合は別の問題です

Bazhu Yingming さん、比例スケーリングなどの操作を実行するために GD 関数を使用しただけですので、アドバイスをお願いします。 ?

コードは次のとおりです

function resizeImg($from,$w=100,$h=100,$newfile){		  $info = getimagesize($from);		  switch ($info[2]){		  case 1:		  $im = imagecreatefromgif($from);			 break;			 case 2:		  $im = imagecreatefromjpeg($from);		  break;			 case 3:		  $im = imagecreatefrompng($from);		  break;			 default:		  	 //exit('不支持的图像格式');			 break;		 }		 $temp = pathinfo($from);		 $name = $temp["basename"];//文件名		 $dir = $temp["dirname"];//文件所在的文件夹		 $extension = $temp["extension"];//文件扩展名		 $width = $info[0];//获取图片宽度		 $height = $info[1];//获取图片高度		 $per1 = round($width/$height,2);//计算原图长宽比		 $per2 = round($w/$h,2);//计算缩略图长宽比		 //计算缩放比例		 if($per1>$per2||$per1==$per2)		 {			 //原图长宽比大于或者等于缩略图长宽比,则按照宽度优先			 $per=$w/$width;		 }		 if($per1<$per2)		 {			 //原图长宽比小于缩略图长宽比,则按照高度优先			 $per=$h/$height;		 }		 $temp_w = intval($width*$per);//计算原图缩放后的宽度		 $temp_h = intval($height*$per);//计算原图缩放后的高度		 $dst_im = imagecreatetruecolor($temp_w, $temp_h);		 //调整大小		 imagecopyresized($dst_im, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);		 //输出缩小后的图像		 //exit($newfile);		 imagejpeg($dst_im,$newfile,100);		 imagedestroy($dst_im);		 imagedestroy($im);	}


次のようなコードもあります

$file = $_FILES["photo"];		$filename=$file["tmp_name"]; 	$size=$file['size']; 	$type=$file['type'];    $max_size=5*1024*1024;	//echo $size;		if($type!="image/jpg"&&$type!="image/jpeg"&&$type!="image/png"&&$type!="image/gif")	{	  	echo"<script>alert('不支持的图像格式')</script>";		exit;	}	 	if($size>$max_size)	{	  	echo"<script>alert('图片尺寸超出上传限制')</script>";		exit;	}	 	$udid=guid();		$target_file="../photos/".$udid.".jpg";	copy($filename,$target_file);		/*	$info=getimagesize($target_file);    print_r($info);	*/	resizeImg($target_file,$nw,$nh,$target_file);		$ifn = $target_file;   //-----------原图像----	$ofn = $target_file;  //---剪切后保存的图像名----	$ext = strtoupper(end(explode('.',$ifn))); 	if(is_file($ifn) && ($ext == "JPG" || $ext == "JPEG")){ 		$source = imagecreatefromjpeg($ifn); 	}elseif(is_file($ifn) && $ext == "PNG"){ 		$source = imagecreatefromPNG($ifn); 	}elseif(is_file($ifn) && $ext == "GIF"){ 		$source = imagecreatefromGIF($ifn); 	} 	$sourceWidth  = imagesx($source); 	$sourceHeight = imagesy($source); 	$thumbWidth = $_POST['w']; 	$thumbHeight = $_POST['h']; 	$thumb = imagecreatetruecolor($thumbWidth, $thumbHeight); 	$x1 = $_POST['x1']; 	$y1 = $_POST['y1']; 	$x2 = $_POST['x2']; 	$y2 = $_POST['y2']; 	imagecopyresampled($thumb, $source,0,0,$x1,$y1,$thumbWidth,$thumbHeight,$thumbWidth,$thumbHeight); 	imagejpeg($thumb, $ofn);		resizeImg($target_file,100,100,$target_file);



問題がどこにあるかを確認するのを手伝ってもらえますか? GD 関数に詳しくないので、ご指導いただければ幸いです、ありがとうございます

アンチエイリアス機能 (imageantialias) を有効にしてみてください

ただし、ビットマップを拡大縮小したため、精度が失われています。避けられない

アンチエイリアス機能(imageantialias)を有効にしてみてください

ただし、ビットマップを拡大縮小すると、精度の低下は避けられません

試してみましたが、効果はないようです! ! !

だから「トライ」です

さあ、頑張ってください!

問題を見つけましたが、ご指導ありがとうございます



これら 2 つの関数は関連していることがわかりました、笑!今後も要注意ですね

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。