PHP を使用して画像ファイルをアップロードし、同じ比率のサムネイル効果を生成する簡単な方法。学習が必要な友人はそれを参照できます。
コードは次のとおりです | コードをコピー |
function _UPLOADPIC($upfile, $maxsize, $updir, $newname = '日付') { if ($newname == '日付') $newname = date ("Ymdhis") //ファイル名として日付を使用します $name = $upfile ["名前"]; $type = $upfile ["タイプ"]; $size = $upfile ["サイズ"]; $tmp_name = $upfile ["tmp_name"]; スイッチ ($type) { ケース 'image/pjpeg' : ケース「画像/jpeg」: $extend = ".jpg"; 休憩; ケース「画像/GIF」: $extend = ".gif"; 休憩; ケース「画像/png」: $extend = ".png"; 休憩; } if (空の空 ($extend)) { echo ( "警告! アップロードできる画像タイプは GIF JPG PNG" ); 終了(); } if ($size > $maxsize) { $maxpr = $maxsize / 1000; echo ( "警告! アップロードする画像のサイズは超えることはできません" . $maxpr . "K!" ); 終了(); } if (move_uploaded_file ( $tmp_name, $updir . $newname . $extend )) { $updir を返します。 $extend; } }
関数 show_pic_scal($width, $height, $picpath) { $imginfo = GetImageSize ( $picpath ); $imgw = $imginfo [0]; $imgh = $imginfo [1];
$ra =number_format ( ($imgw / $imgh), 1 ); $ra2 =number_format ( ($imgh / $imgw), 1 );
if ($imgw > $width または $imgh > $height) { if ($imgw > $imgh) { $newWidth = $width; $newHeight = ラウンド ( $newWidth / $ra );
} elseif ($imgw < $imgh) { $newHeight = $height; $newWidth = ラウンド ( $newHeight / $ra2 ); } 他 { $newWidth = $width; $newHeight = ラウンド ( $newWidth / $ra ); } } 他 { $newHeight = $imgh; $newWidth = $imgw; } $newsize [0] = $newWidth; $newsize [1] = $newHeight;
$newsize を返す; }
関数getImageInfo($src) { getimagesize($src)を返す; } /** * 画像を作成し、リソースタイプを返します * @param string $src 画像パス * @return resource $im 返されるリソースの種類 * **/ 関数作成($src) { $info=getImageInfo($src); スイッチ ($info[2]) { ケース1: $im=imagecreatefromgif($src); 休憩; ケース2: $im=imagecreatefromjpeg($src); 休憩; ケース 3: $im=imagecreatefrompng($src); 休憩; } $im を返します; } /** *サムネイルメイン機能 * @param string $src 画像パス * @param int $w サムネイルの幅 * @param int $h サムネイルの高さ * @returnmixedサムネイルパスに戻る * **/
関数リサイズ($src,$w,$h) { $temp=パス情報($src); $name=$temp["basename"];//ファイル名 $dir=$temp["dirname"];//ファイルが置かれているフォルダー $extension=$temp["extension"];//ファイル拡張子 $savepath="{$dir}/{$name}";//サムネイルの保存パス、新しいファイル名は *.thumb.jpg です
//画像の基本情報を取得します $info=getImageInfo($src); $width=$info[0];//画像の幅を取得します $height=$info[1];//画像の高さを取得します $per1=round($width/$height,2);//元の画像のアスペクト比を計算します $per2=round($w/$h,2);//サムネイルのアスペクト比を計算します
//スケーリング率を計算する if($per1>$per2||$per1==$per2) { //元画像のアスペクト比がサムネイルのアスペクト比以上の場合、幅が優先されます $per=$w/$幅; } if($per1 { //元画像の縦横比がサムネイルの縦横比より小さい場合は高さを優先します $per=$h/$身長; } $temp_w=intval($width*$per);//スケーリング後の元の画像の幅を計算します $temp_h=intval($height*$per);//スケーリング後の元の画像の高さを計算します $temp_img=imagecreatetruecolor($temp_w,$temp_h);//キャンバスを作成します $im=create($src); imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height); if($per1>$per2) { imagejpeg($temp_img,$savepath, 100); imagedestroy($im); return addBg($savepath,$w,$h,"w"); //幅優先、拡大縮小後に高さが足りない場合は背景を追加 } if($per1==$per2) { imagejpeg($temp_img,$savepath, 100); imagedestroy($im); $savepath を返す; //均等スケーリング } if($per1 { imagejpeg($temp_img,$savepath, 100); imagedestroy($im); return addBg($savepath,$w,$h,"h"); //高さ優先、拡大縮小後に幅が足りない場合は背景を追加 } } /** * 背景を追加します * @param string $src 画像パス * @param int $w 背景画像の幅 * @param int $h 背景画像の高さ * @param 文字列 $first は画像の最終的な位置を決定します、w 幅が最初 h 高さの優先順位 wh: 等しい比率 * @return 背景付きの写真を返します * **/ 関数 addBg($src,$w,$h,$fisrt="w") { $bg=imagecreatetruecolor($w,$h); $white = imagecolorallocate($bg,255,255,255); imagefill($bg,0,0,$white);//背景を塗りつぶす
//対象画像情報を取得 $info=getImageInfo($src); $width=$info[0];//ターゲット画像幅 $height=$info[1];//ターゲット画像の高さ $img=作成($src); if($fisrt=="wh") { //均等スケーリング $src を返す; } その他 { if($fisrt=="w") { $x=0; $y=($h-$height)/2;//垂直方向の中央揃え } if($fisrt=="h") { $x=($w-$width)/2;//水平方向の中心 $y=0; } imagecopymerge($bg,$img,$x,$y,0,0,$width,$height,100); imagejpeg($bg,$src,100); imagedestroy($bg); imagedestroy($img); $src を返す; } 使用方法: $filename=(_UPLOADPIC($_FILES["upload"],$maxsize,$updir,$newname='date')); |