ホームページ >バックエンド開発 >PHPチュートリアル >PHP 画像を固定サイズのコードにトリミングする方法
ホームページ呼び出し画像を作成する場合、ホームページの画像位置はデザイナーが指定することが多いため、最新リリース画像を呼び出す場合は何があるか分からないため、固定サイズの画像を取得する必要がある場合があります。そのため、画像の比率を決定する方法がない場合、フロントエンド ページの作成者は通常、画像のオーバーフローを制御するために img 要素の高さと幅を固定する方法を使用します。ただし、画像の比率が必要な比率でない場合、呼び出し後に画像が変形してしまい、ページの美しさに大きな影響を及ぼします。解決策の 1 つは、元の画像の比率に合わせて画像を拡大縮小することです。拡大縮小された画像には必然的に空白が生じます。この方法では、画像は変形しませんが、たとえば、ユーザーが非常に大きな画像を送信した場合、大きな歪みが発生します。高さはありますが幅は平均的で、1:1 の画像に圧縮すると、圧縮後に画像は基本的に見えなくなります。
ここでの私の解決策は、画像を固定サイズにトリミングすることです。画像は変形せず、空白スペースは常に引き伸ばされて埋められます。bcastr を使用したことがある友人はそれを知っているはずです。 bcastr は、画像が呼び出されないことを保証します。固定サイズの出力画像フレームの場合、ソース画像には次の状況があります。
1: 出力される画像の高さと幅が、画像の高さと幅より小さい。ソース画像、判定 $new_width<$src_width && $new_height<$ src_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 "params 幅または高さのエラー!";
exit();
}
if(!file_exists($src_file)) {
echo $src_file . " は存在しません !";
exit();
}
// 画像タイプ
$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=imagecreatefromp NG( $src_file);
case IMAGETYPE_GIF :
$src_img=imagecreatefromgif($src_file);
echo "画像の読み込みエラー!"
$w=imagesx($) src_img);
$h=imagesy($ src_img);
$ratio_w=1.0 * $new_width / $w;
$ratio=1.0;生成された画像が元の画像より小さい、または両方が大きい場合、拡大するには大きな比率を使用し、縮小するには大きな比率を使用するのが原則です (縮小された比率は小さくなります)
if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > ; 1)) {
if($ratio_w < $ratio_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); ,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);
switch($type) {
case IMAGETYPE_JPEG :
imagejpeg, $dst_file,100); // 画像を保存
case IMAGETYPE_PNG :
imagepng($new_img,$dst_file,100); ;
default:
break;
}
} // end if 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); it
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 :
imagepng($new_img,$dst_file,100);
imagegif($new_img,$dst_file,100);
}
}// if3
}// 関数を終了します
?>
上記は、PHP で画像を固定サイズにトリミングするコード方法を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。