ホームページ > バックエンド開発 > PHPチュートリアル > PHP 画像のトリミングとスケーリングの方法

PHP 画像のトリミングとスケーリングの方法

WBOY
リリース: 2016-07-25 08:53:04
オリジナル
1015 人が閲覧しました
  1. /* 元ファイルが存在するか確認し、元ファイルの情報を取得します*/
  2. $org_info = @getimagesize($img)
  3. $img_org = $this->img_resource($img, $org_info; [2] );
  4. /* 元の画像とサムネイル画像のサイズ比*/
  5. $scale_org = $org_info[0] / $org_info[1];
  6. /* サムネイルの幅と背景がサムネイルと同じサイズの場合*/
  7. if ($thumb_width == 0 && $thumb_height == 0) {
  8. $thumb_width = $org_info[0];
  9. $thumb_height = $org_info[ 1];
  10. } else {
  11. if ($thumb_width == 0)
  12. {
  13. $thumb_width = $thumb_height * $scale_org;
  14. }
  15. if ($thumb_height == 0)
  16. {
  17. $thumb_height = $thumb_width / $scale_org ;
  18. }
  19. }
  20. / * サムネイルを作成するための識別子*/
  21. if ($gd == 2)
  22. {
  23. $img_thumb = imagecreatetruecolor($thumb_width, $thumb_height)
  24. }
  25. else
  26. {
  27. $img_親指 = imagecreate ($thumb_width, $thumb_height) );
  28. }
  29. $clr = imagecolorallocate($img_thumb, 255, 255, 255)
  30. imagefilledrectangle($img_thumb, 0, 0, $thumb_height, $clr);
  31. if ($org_info[0] / $thumb_width > Subject*/
  32. $lessen_width = $thumb_height * $scale_org;
  33. $lessen_height = $thumb_height;
  34. }
  35. $dst_x = ($thumb_width - $lessen_width) / 2;
  36. $ dst_y = ($thumb_height - $lessen_height) / 2;
  37. /* 元の画像を拡大縮小します*/
  38. if ($gd == 2)
  39. {
  40. imagecopyresampled($img_thumb, $img_org, $dst_x, $dst_y, 0, 0, $lessen_width, $lessen_height, $org_info[0], $org_info[1]);
  41. }
  42. else
  43. {
  44. imagecopyresize($img_thumb, $img_org, $dst_x, $dst_y, 0, 0, $lessen_width, $ 2 番目の方法は、指定された幅と高さを元の画像から直接切り取って使用することです。白いエッジが表示されるのは望ましくありません。この方法は方位角モードと固定点モードに分けられ、方位角モードはカット開始点となる上端、中端、下端の左中右の方向に応じて9点に分割できます。 -point モードでは、ユーザーは切断の開始点を定義できます。この方法も、まず画面として指定したサイズの白い画像(bbs.it-home.org)を作成し、次にimagecopy関数を使用して元の画像上で指定したサイズと位置の画像を切り出し、その後、 imagecopyresampled 関数は、カットされたイメージを画面にカバーします。
  45. 利点: 基本的に、白い背景領域が画像に表示されないことを保証でき、画像空間全体を元の画像のコンテンツで埋めることができます。 デメリット:致命的なデメリットとしては、サムネイルに元画像の内容が完全に反映されないこと。例えば、キャラクター画像によっては、左上を切り出し開始点とした場合、顔が半分しか表示されない場合がある。 したがって、2 つのモードのどちらかを選択する場合は、実際のニーズに応じて選択する必要があります。
  46. コアコード:
  47. $img_org = $this->img_resource($img, $org_info[2]);
  48. /* サムネイルのサイズ比率*/
  49. $scale_org = $thumb_width / $thumb_height;
/* サムネイルを作成識別子 */
if ($gd == 2) { $img_thumb = imagecreatetruecolor($thumb_width, $thumb_height);
else

{

$img_thumb = imagecreate($thumb_width, $thumb_height)

}

$clr = imagecolorallocate($img_thumb, 255, 255, 255);

imagefilledrectangle($img_thumb, 0, 0, $thumb_width, $thumb_height, $clr); /* トリミングされた画像の幅と高さを計算します*/
$mid_width = ($org_info[0] $mid_height = ($org_info[1] // カット画像の背景アートボードを作成
  • $mid_img = imagecreatetruecolor($mid_width, $mid_height);
  • // カット画像データをアートボードにコピーしてカット画像を生成
  • imagecopy($mid_img, $ img_org, 0 , 0, 0, 0, $mid_width, $mid_height);
  • /* 元の画像を拡大縮小します*/
  • if ($gd == 2)
  • {
  • imagecopyresampled($img_thumb, $mid_img, 0, 0, 0, 0 , $thumb_width, $thumb_height, $mid_width, $mid_height);
  • }
  • else
  • {
  • imagecopyresize($img_thumb, $mid_img, 0, 0, 0, 0, $thumb_width, $thumb_height, $mid_width , $mid_height);
  • }
  • コードをコピー
  • 関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート