ホームページ > バックエンド開発 > PHPチュートリアル > PHPで画像を固定サイズにトリミングする方法

PHPで画像を固定サイズにトリミングする方法

WBOY
リリース: 2016-07-25 09:13:09
オリジナル
999 人が閲覧しました

ホームページ呼び出し画像を作成するとき、通常、ホームページの画像位置はデザイナーによって指定されているため、最新リリースの画像呼び出しを作成している場合は、どのような比率になるかわからないため、固定サイズの画像を取得する必要がある場合があります。その際、フロントエンドページの作成者は通常、img 要素の高さと幅を固定して画像を制御する方法を使用します。ただし、画像の比率が必要な比率でない場合、呼び出し後に画像が変形する可能性があり、ページの美しさに大きな影響を与えます。元の画像の比率に応じて拡大縮小すると、画像が変形することはありませんが、画像に空白部分が必ず発生します。たとえば、ユーザーが画像を送信した場合、多くの問題が発生します。これは高さは非常に高いものの、幅は平均的であり、1:1 の画像に圧縮された場合、圧縮後に画像は基本的に表示されなくなります。

解決策は、画像を固定サイズにトリミングすることです。画像は変形せず、画像は常に空白なしで引き伸ばされて埋められます。bcastr を使用したことがある友人は知っているはずです。呼び出し時に画像が変形しないようにするため、ソース画像には次のような状況があります。 1: 出力する画像の高さ、幅がソース画像の高さ、幅より小さいと判断 $new_width$src_width && $new_height>$src_width と書きます 3: 1 と 2 の 2 つのタイプ、つまりズームインしながらズームアウトする状況と、等しいとの判断を除外します。 1と2は関数の処理コードが全く同じなので1つの処理文にまとめられます

php実装コード

  1. /*
  2. * 説明: 画像を変形させずに任意のサイズの画像にトリミングする機能です
  3. * パラメータの説明: 処理する画像のファイル名を入力し、新しい画像を生成して保存します。 ファイル名、生成された新しい画像の幅、生成された新しい画像の高さ
  4. * 作成者 smallchicken
  5. * 時刻 2008-12-18
  6. */
  7. // 任意のサイズの画像を取得します、欠落部分を引き伸ばし、変形せず、空白のままにしません
  8. function my_image_resize($src_file, $dst_file , $new_width , $new_height) {
  9. if($new_width <1 || $new_height <1) {
  10. echo "params幅または高さのエラー !";
  11. exit() ;
  12. }
  13. if(!file_exists($src_file)) {
  14. echo $src_file . " は存在しません !";
  15. exit();
  16. }
  17. // 画像タイプ
  18. $type=exif_imagetype($src_file);
  19. $ support_type=array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);
  20. if(!in_array($type, $support_type,true)) {
  21. echo "このタイプの画像はサポートされていません! support jpg, gif or png";
  22. exit( );}} L // 画像読み込み
  23. switch ($ Type) {
  24. Case ImageType_JPEG:
  25. $ SRC_IMG = ImageCreateFromjpeg ($ src_file);
  26. case imagepe _Png: s $ src_img = ImageCreateFrompng ($ src_file);
  27. case IMAGETYPE_GIF :
  28. $src_img=imagecreatefromgif($src_file);
  29. echo "画像の読み込みエラー!"
  30. $w=image SX ($src_img);
  31. $h=images($src_img);
  32. $ratio_w=1.0 * $new_width / $w;
  33. $ratio=1.0;生成された画像の幅と幅が元の画像より小さい、または両方が大きい場合、拡大するには大きな比率を使用し、縮小には大きな比率を使用するのが原則です (縮小された比率は小さくなります)
  34. if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > }else {
  35. $ratio = $ratio_w ;
  36. // ターゲットの要件を正確に満たす中間一時画像を定義します
  37. $inter_w=(int)($new_width / $ratio);
  38. $inter_h =(int) ($new_height / $ratio);
  39. $inter_img=imagecreatetruecolor($inter_w , $inter_h); src_img, 0,0,0,0,$inter_w,$inter_h);
  40. // 最大辺の長さをターゲット画像のサイズとして一時画像を生成します $ratio
  41. // 新しい画像を定義します
  42. $new_img=imagecreatetruecolor ($new_width,$new_height);
  43. imagecopyresampled($new_img,$inter_img, 0,0,0,0,$new_width,$new_height,$inter_w,$inter_h);
  44. case IMAGETYPE_JPEG :
  45. imagejpeg($new_img, $dst_file,100); // 画像を保存
  46. case IMAGETYPE_PNG($new_img,$dst_file,100);
  47. case IMAGETYPE_GIF($new_img,$dst_file, 100); / end if 1
  48. // 2 対象画像の片側が元の画像より大きく、片側が元の画像より小さい まずプレーン画像を拡大してからトリミングします
  49. // =if( ($ rate_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) )
  50. $ratio=$ratio_h>$ratio_w?大きい方の比率の値
  51. // 画像の高さまたは幅がターゲット画像と等しい中間の大きな画像を定義し、元の画像を拡大します
  52. $inter_w=(int)($w * $ratio); $inter_h=(int) ($h * $ratio);
  53. $inter_img=imagecreatetruecolor($inter_w, $inter_h);
  54. //元の画像をスケーリング後にトリミングします
  55. imagecopyresampled($inter_img,$src_img,0,0, 0,0,$inter_w,$inter_h,$w,$h );
  56. // 新しい画像を定義します
  57. $new_img=imagecreatetruecolor($new_width,$new_height);
  58. imagecopy($new_img, $inter_img, 0,0, 0,0,$new_width,$new_height);
  59. switch( $type) {
  60. case IMAGETYPE_JPEG :
  61. imagejpeg($new_img, $dst_file,100) // 画像を保存
  62. break; ,$dst_file,100);
  63. break;
  64. imagegif($new_img,$dst_file,100);
  65. default:
  66. }
  67. }// 関数を終了しますか? >
  68. コードをコピー
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート