この記事は主に、画像を変更せずにPHP画像をトリミングする機能を紹介します。必要な友達はそれを参照してください
。画像をアップロードした後、自動的にトリミングされ、トリミングされた画像がフロントデスクに表示されるため。
要件は上記の通り、ソースコードは次のとおりです:
コードは次のとおりです:
*exif_imagetype -- 画像のタイプを決定します
*説明: 画像を変形させずに任意のサイズの画像にトリミングする機能です
* パラメータの説明: 処理する画像のファイル名を入力し、新しい画像の保存ファイル名を生成し、新しい画像の幅を生成し、新しい画像の高さを生成します
*/
// 任意のサイズの画像を取得し、欠けている部分を変形したり空白を残さずに引き伸ばします
関数 my_image_resize($src_file, $dst_file , $new_width , $new_height) {
$new_width= intval($new_width);
$new_height=intval($new_width);
if($new_width
echo "パラメータの幅または高さのエラー!";
終了();
}
if(!file_exists($src_file)) {
echo $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 のみをサポートします";
終了();
}
//画像をロード
スイッチ($type) {
ケース IMAGETYPE_JPEG :
$src_img=imagecreatefromjpeg($src_file);
休憩;
ケース IMAGETYPE_PNG :
$src_img=imagecreatefrompng($src_file);
休憩;
ケース IMAGETYPE_GIF :
$src_img=imagecreatefromgif($src_file);
休憩;
デフォルト:
echo "画像の読み込みエラー!";
終了();
}
$w=imagesx($src_img);
$h=imagesy($src_img);
$ratio_w=1.0 * $new_width / $w;
$ratio_h=1.0 * $new_height / $h;
$ratio=1.0;
// 生成される画像の高さ、幅は元の画像より小さくなったり大きくなったりするのですが、大きく拡大、大きく縮小するのが原則です(縮小率は小さくなります)
if( ($ratio_w 1 && $ratio_h > 1)) {
if($ratio_w < $ratio_h) {
$ratio = $ratio_h; // ケース 1、幅の比率が高さ方向より小さい場合、高さの比率の基準に従ってトリミングまたは拡大します
}その他{
$ratio = $ratio_w ;
}
// アスペクト比がターゲット要件を正確に満たす中間一時画像を定義します
$inter_w=(int)($new_width / $ratio);
$inter_h=(int) ($new_height / $ratio);
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
//var_dump($inter_img);
imagecopy($inter_img, $src_img, 0,0,0,0,$inter_w,$inter_h);
// ターゲット画像のサイズとして最大辺の長さをもつ一時画像を生成 $ratio
//新しい画像を定義します
$new_img=imagecreatetruecolor($new_width,$new_height);
//var_dump($new_img);exit();
imagecopyresampled($new_img,$inter_img,0,0,0,0,$new_width,$new_height,$inter_w,$inter_h);
スイッチ($type) {
ケース IMAGETYPE_JPEG :
imagejpeg($new_img, $dst_file,100); // 画像を保存します
休憩;
ケース IMAGETYPE_PNG :
imagepng($new_img,$dst_file,100);
休憩;
ケース IMAGETYPE_GIF :
imagegif($new_img,$dst_file,100);
休憩;
デフォルト:
休憩;
}
} // 1 の場合は終了
// 2 対象画像の片側が元の画像より大きく、片側が元の画像より小さくなります。まず通常の画像を拡大してからトリミングします
。// =if( ($ratio_w 1) || ($ratio_w >1 && $ratio_h
その他{
$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);
スイッチ($type) {
ケース IMAGETYPE_JPEG :
imagejpeg($new_img, $dst_file,100); // 画像を保存します
休憩;
ケース IMAGETYPE_PNG :
imagepng($new_img,$dst_file,100);
休憩;
ケース IMAGETYPE_GIF :
imagegif($new_img,$dst_file,100);
休憩;
デフォルト:
休憩;
}
}//if3
}//関数を終了します
my_image_resize('test.gif','11111.gif','100px','100px');
?>