ホームページ >バックエンド開発 >PHPチュートリアル >PHPで画像サイズを変更する方法の分析例
画像のサイズの変更は非常に一般的な機能要件です。PHP で画像のサイズを変更する方法を学びましょう。
まずは私が書いた関数を紹介します。
<?php $imgsrc = "http://www.nowamagic.net/images/3.jpg"; $width = 780; $height = 420; resizejpg($imgsrc,$imgdst,$width,$height); function resizejpg($imgsrc,$imgdst,$imgwidth,$imgheight) { //$imgsrc jpg格式图像路径 $imgdst jpg格式图像保存文件名 $imgwidth要改变的宽度 $imgheight要改变的高度 //取得图片的宽度,高度值 $arr = getimagesize($imgsrc); header("Content-type: image/jpg"); $imgWidth = $imgwidth; $imgHeight = $imgheight; // Create image and define colors $imgsrc = imagecreatefromjpeg($imgsrc); $image = imagecreatetruecolor($imgWidth, $imgHeight); //创建一个彩色的底图 imagecopyresampled($image, $imgsrc, 0, 0, 0, 0,$imgWidth,$imgHeight,$arr[0], $arr[1]); imagepng($image); imagedestroy($image); } ?>
imagecopyresampled
imagecopyresampled -- 画像のコピー部分をリサンプルし、サイズを変更します。
int imagecopyresampled ( resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
imagecopyresampled() ある画像内の正方形の領域を別の画像にコピーします ピクセルを滑らかに補間します画像内の値を調整することで、特に、優れた鮮明さを維持しながら画像のサイズを縮小します。 dst_im と src_im は、それぞれターゲット イメージとソース イメージの識別子です。ソースとデスティネーションの幅と高さが異なる場合、画像はそれに応じて縮小または伸縮します。座標は左上隅を指します。この関数は、同じイメージ内の領域をコピーするために使用できます (dst_im と src_im が同じ場合) が、領域が重複している場合の結果は予測できません。
注: パレット画像の制限 (255+1 色) により問題が発生します。画像のリサンプリングまたはフィルタリングには 255 を超える色が必要になることが多く、新しいリサンプリングされたピクセルとその色の計算には近似値が使用されます。パレット画像に新しい色を割り当てようとするときに、それが失敗した場合は、(理論的に) 計算された最も近い色が選択されます。これは必ずしも視覚的に最も近い色であるとは限りません。これにより、空白 (または視覚的に空白) の画像など、奇妙な結果が生じる可能性があります。この問題を回避するには、imagecreatetruecolor() で作成されたものなど、トゥルーカラー イメージをターゲット イメージとして使用します。
注: imagecopyresampled() には GD 2.0.l 以降が必要です。
簡単な例:
コードは次のとおりです:
<?php // The file $filename = 'test.jpg'; $percent = 0.5; // Content type header('Content-Type: image/jpeg'); // Get new dimensions list($width, $height) = getimagesize($filename); $new_width = $width * $percent; $new_height = $height * $percent; // Resample $image_p = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); // Output imagejpeg($image_p, null, 100); ?>
例 2:
<?php // The file $filename = 'test.jpg'; // Set a maximum height and width $width = 200; $height = 200; // Content type header('Content-Type: image/jpeg'); // Get new dimensions list($width_orig, $height_orig) = getimagesize($filename); $ratio_orig = $width_orig/$height_orig; if ($width/$height > $ratio_orig) { $width = $height*$ratio_orig; } else { $height = $width/$ratio_orig; } // Resample $image_p = imagecreatetruecolor($width, $height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); // Output imagejpeg($image_p, null, 100); ?>
画像のサイズを変更するには 2 つの方法があります:
ImageCopyResize() 関数はすべての GD バージョンで機能しますが、画像のスケーリング このアルゴリズムは比較的粗雑です。
ImageCopyResamples() のピクセル補間アルゴリズムによって取得された画像のエッジは比較的滑らかです。 (ただし、この関数は ImageCopyResize() よりも遅くなります)。
2 つの関数のパラメータは次のように同じです:
コードは次のとおりです:
imageCopyResampled(dest,src,dy,dx,sx,sy,dw,dh,sw,sh); imageCopyResized(dest,src,dy,dx,sx,sy,dw,dh,sw,sh);
例:
<?PHP $src = ImageCreateFromJPEG('php.jpg'); $width = ImageSx($src); $height = ImageSy($src); $x = $widht/2; $y = $height/2; $dst = ImageCreateTrueColor($x,$y); ImageCopyResampled($dst,$src,0,0,0,0,$x,$y,$widht,$height); header('Content-Type : image/png'); ImagePNG($det); ?>
php で jpg 画像ファイルのサイズを変更する方法
コードは次のとおりです:
<? function resize_jpg($img,$w,$h){ // $thumb = imagecreate ($w, $h); $image = imagecreatefromjpeg($img); $imagedata = getimagesize($img); if ($h = "auto") $h = $w/($imagedata[0]/$imagedata[1]);//根据原图的纵横比得出高度! $thumb = imagecreatetruecolor ($w, $h); imagecopyresized ($thumb, $image, 0, 0, 0, 0, $w, $h, $imagedata[0], $imagedata[1]); imagejpeg($thumb); } //resize_jpg($file,$w,$h); resize_jpg("images/dsc01244.jpg",100,100); imagedestory($thumb); imagedestory($image); ?>
関数コード:
<?php /* * 图片缩略图 * $srcfile 来源图片, * $rate 缩放比,默认为缩小一半,或者具体宽度象素值 * $filename 输出图片文件名jpg * 例如: resizeimage("zt32.gif",0.1); * 例如: resizeimage("zt32.gif",250 ); * 说明:调用时直接把函数的结果放在HTML文件IMG标签中的SRC属性里 */ function resizeimage($srcfile,$rate=.5, $filename = "" ){ $size=getimagesize($srcfile); switch($size[2]){ case 1: $img=imagecreatefromgif($srcfile); break; case 2: $img=imagecreatefromjpeg($srcfile); break; case 3: $img=imagecreatefrompng($srcfile); break; default: exit; } //源图片的宽度和高度 $srcw=imagesx($img); $srch=imagesy($img); //目的图片的宽度和高度 if($size[0] <= $rate || $size[1] <= $rate){ $dstw=$srcw; $dsth=$srch; }else{ if($rate <= 1){ $dstw=floor($srcw*$rate); $dsth=floor($srch*$rate); }else { $dstw=$rate; $rate = $rate/$srcw; $dsth=floor($srch*$rate); } } //echo "$dstw,$dsth,$srcw,$srch "; //新建一个真彩色图像 $im=imagecreatetruecolor($dstw,$dsth); $black=imagecolorallocate($im,255,255,255); imagefilledrectangle($im,0,0,$dstw,$dsth,$black); imagecopyresized($im,$img,0,0,0,0,$dstw,$dsth,$srcw,$srch); // 以 JPEG 格式将图像输出到浏览器或文件 if( $filename ) { //图片保存输出 imagejpeg($im, $filename ); }else { //图片输出到浏览器 imagejpeg($im); } //释放图片 imagedestroy($im); imagedestroy($img); } ?>
以上がPHPで画像サイズを変更する方法の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。