PHP 画像を固定サイズのコードにトリミングする方法_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:44:40
オリジナル
770 人が閲覧しました

ホームページ呼び出し画像を作成する場合、ホームページの画像位置はデザイナーが指定することが多いため、最新リリース画像を呼び出す場合は何があるか分からないため、固定サイズの画像を取得する必要がある場合があります。そのため、画像の比率を決定する方法がない場合、フロントエンド ページの作成者は通常、画像のオーバーフローを制御するために 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
}// 関数を終了します
?>



http://www.bkjia.com/PHPjc/320499.html

www.bkjia.com

本当

http://www.bkjia.com/PHPjc/320499.html

技術記事

ホームページ呼び出し画像を作成する場合、通常、ホームページの画像位置はデザイナーによって指定されるため、固定サイズの画像を取得する必要がある場合があります。最新リリースの画像呼び出しを作成している場合は、...





ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート