ホームページ >バックエンド開発 >PHPチュートリアル >PHP チュートリアル: 任意の画像を固定サイズにトリミングする_PHP チュートリアル
Bkjia.Com PHP ドキュメント: ホームページ呼び出し画像を作成するには、通常、最新リリースを作成する場合、ホームページの画像位置はデザイナーによって指定されるため、固定サイズの画像を取得する必要がある場合があります。画像の呼び出し。顧客がアップロードする画像の割合がわからないため、フロントエンド ページの作成者は通常、画像の高さと幅を固定する方法を使用します。 img 要素を使用して画像のオーバーフローを制御しますが、画像の比率が必要な比率ではない場合、呼び出し後に画像が変形してしまい、ページの美しさに大きな影響を及ぼします。解決策の 1 つは、画像の比率に応じて拡大縮小することです。画像が変形することはありませんが、拡大縮小された画像には必然的に空白が生じます。たとえば、ユーザーが高解像度の画像を送信した場合、多くの問題が発生します。画像ですが、平均的な幅であり、1:1 画像に圧縮された場合、圧縮後は基本的に画像には表示されません。
ここでの私の解決策は、画像を固定サイズにトリミングすることです。画像は変形せず、空白スペースは常に引き伸ばされて埋められ、bcastr を使用したことのある友人は知っているはずです。 bcastr は、固定サイズの出力画像フレームの場合、画像が呼び出されないことを保証します。
1: 出力する画像の高さと幅がソース画像の高さと幅より小さい、と判断して書きます $new_width 2: 出力する画像の高さと幅元の画像の高さと幅より大きい場合を出力する、という判定を書きます $new_width>$src_width && $new_height>$src_width
3: 1番目と2番目のタイプ、つまりズームアウトしながらズームインする場合を除外します, 等しいかどうかの判断を加えます
1, 2 については、関数の処理コードは全く同じなので、処理文にまとめることができます
以下は PHP で実装されたコードです:
以下は引用内容です: /* * 説明: 画像を変形せずに任意のサイズの画像にトリミングする機能です * パラメータの説明: 画像のファイル名を入力してください処理対象、新しい画像の保存ファイル名を生成、新しい画像の幅を生成、新しい画像の高さを生成 * 作成者 smallchicken * 時刻 2008-12-18 */ // を取得画像のサイズを変更し、足りない部分を引き伸ばします。空白を残さず変形します function my_image_resize($src_file, $dst_file , $new_width , $new_height) { if($new_width <1 || $new_height <1) { echo "幅または高さのエラー !"; exit(); if(!file_exists($src_file)) { $src_file が存在しません !"; } // 画像タイプ $ type=exif_imagetype($src_file); $support_type=array(IMAGETYPE_JPEG , IMAGETYPE_PNG , IMAGETYPE_GIF); if(!in_array($type, $support_type,true)) { echo "画像のタイプはサポートされていません! jpg、gif、または png のみをサポートします"; exit(); } //画像をロード switch($type) { case IMAGETYPE_JPEG : $src_img=imagecreatefromjpeg($src_file); break; case IMAGETYPE_PNG : $src_img=imagecreatefrompng($src_file); case IMAGETYPE_GIF : default: echoエラー!"; exit(); $ w=imagesx($src_img); $ratio_w=1.0 * $new_height / $h; $ratio=1.0; / / 生成される画像の高さおよび幅は、元の画像よりも小さいまたは大きい比率で拡大し、大きい比率で縮小することが原則です (縮小率は小さくなります) if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) { if($ratio_w < $ratio_h) { $ratio = $ rate_h ; // ケース 1、幅と高さの比率 方向が小さい場合は、高さの比率に従ってトリミングまたは拡大します }else { $ratio = $ratio_w } // 中間の一時画像を定義します。アスペクト比はターゲット要件を満たしています $inter_w= (int)($new_width / $ratio); $inter_h=(int) ($new_height / $ratio); $inter_img=imagecreatetruecolor($inter_w , $inter_h); imagecopy($inter_img, $src_img, 0, 0,0,0,$inter_w,$inter_h); // 最大辺の長さをターゲット画像のサイズとして一時画像を生成します $ratio //新しい画像 $new_img=imagecreatetruecolor($new_width ,$new_height); imagecopyresampled($new_img,$inter_img,0,0,0,0,$new_width,$new_height,$inter_w,$inter_h); ) { case IMAGETYPE_JPEG : imagejpeg( $new_img, $dst_file,100) // 画像を保存 break; imagepng($new_img,$dst_file,100); : imagegif($new_img,$dst_file,100) ; break; default: } } // 1 の場合終了 // 2 ターゲット画像の片側が元の画像より大きい最初に通常の画像を拡大してからトリミングします // = if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) ) else{ $ratio=$ratio_h>$ratio_w? $ratio_h : $ratio_w; // 比率が大きい方の値を取得します // 高さまたは幅がターゲット画像と等しい大きな中間画像を定義し、拡大します元の画像 $inter_w=(int)($w * $ratio); $inter_h=(int) ($h * $ratio); $inter_img=imagecreatetruecolor($inter_w , $inter_h);スケーリング後の元の画像 imagecopyresampled($inter_img,$src_img,0,0, 0,0,$inter_w,$inter_h,$w,$h); //新しい画像を定義します $new_img=imagecreatetruecolor($) new_width,$new_height); imagecopy($new_img, $inter_img, 0,0 ,0,0,$new_width,$new_height) { case IMAGETYPE_JPEG : imagejpeg($new_img, $dst_file) ,100); // 画像を保存 case IMAGETYPE_PNG($new_img,$dst_file,100) imagegif($new_img,$dst_file,100);デフォルト: break; } }// if3 }// 関数を終了 ?> |