現在の位置: ホーム> 最新記事一覧> 画像機能で画像をトリミングするときの座標と幅と高さの設定の詳細な説明

画像機能で画像をトリミングするときの座標と幅と高さの設定の詳細な説明

gitbox 2025-05-29

PHPでは、画像のトリミングを処理することは、画像処理タスクの非常に一般的な部分です。 PHP 5.5.0以降、PHPには画像のクロッキング部分が組み込まれた画像機能が組み込まれており、これは以前の複雑なマニュアルトリッピングよりも簡潔で効率的です。

この記事では、イメージクロップ関数を正しく使用する方法、特にトリミング中に渡された座標と幅と高さのパラメーターを設定する方法を詳細に紹介し、一般的なエラーとトラップを避けます。


1。画像機能の概要

画像関数のプロトタイプは次のとおりです。

 imagecrop(GdImage $image, array $rect): ?GdImage
  • $画像:トリミングされる画像リソース。

  • $ rect :クリッピング領域の座標と寸法を定義する連想配列。次のキーを含める必要があります。

    • X :作物領域の左上隅の水平座標(ピクセル、整数)。

    • Y :作物領域の左上隅の垂直座標(ピクセル、整数)。

    • :作物面積の幅(ピクセル)。

    • 高さ:作物面積の高さ(ピクセル)。

関数が成功すると、トリミングされた新しい画像リソースを返し、失敗するとfalseを返します。


2。座標と幅と高さのパラメーターの特定の意味

  1. 座標(x、y)
    元の写真のクロップ箱の左上隅の位置を示します。座標は、起源(0,0)の左上隅からのもので、X軸は右に成長し、Y軸は下向きに成長します。

  2. 幅と高さ
    ピクセル単位の作物箱のサイズを表します。正の整数である必要があり、元の画像の残りの利用可能な領域を超えることはできません。


3.パラメーターを正しく設定する方法は?

  1. 座標とサイズが元の画像の境界を超えないようにしてください<br> たとえば、元の画像幅が$ imgwidthで、高さが$ imgheightの場合、満たす必要があります。

     $x >= 0 && $y >= 0
    $x + $width <= $imgWidth
    $y + $height <= $imgHeight
    

    それ以外の場合、トリミング操作は故障し、虚偽を返します。

  2. パラメータータイプは整数<br>でなければなりません 非整数引数は、エラーや例外を引き起こす可能性があります。

  3. 作物面積の幅と高さが0を超えていることを確認してください
    幅または高さが0または負の場合、収穫は無効です。


4.サンプルコード

画像のがあると仮定します。jpgは、座標(50、30)、幅200ピクセル、高さ150ピクセルから開始します。

 <?php
// 写真をロードします
$image = imagecreatefromjpeg('http://gitbox.net/example.jpg');
if (!$image) {
    die('画像のロードに失敗しました');
}

// 元の画像サイズを取得します
$imgWidth = imagesx($image);
$imgHeight = imagesy($image);

// 作物パラメーターを設定します
$cropRect = [
    'x' => 50,
    'y' => 30,
    'width' => 200,
    'height' => 150,
];

// 切断エリアが合法かどうかを判断します
if ($cropRect['x'] < 0 || $cropRect['y'] < 0 ||
    $cropRect['x'] + $cropRect['width'] > $imgWidth ||
    $cropRect['y'] + $cropRect['height'] > $imgHeight) {
    die('作物面積は画像境界を超えています');
}

// 写真の収穫
$cropped = imagecrop($image, $cropRect);
if ($cropped !== false) {
    // トリミングされた写真を保存します
    imagejpeg($cropped, 'cropped_example.jpg');
    imagedestroy($cropped);
    echo "成功したカット!";
} else {
    echo "トリミングが失敗しました!";
}

// 無料のリソース
imagedestroy($image);
?>

5.よくある質問と解決策

  • 収穫領域は画像の境界を超えています<br> ImageCropfalseを返します。解決策:最初に座標と寸法の範囲を検出して制限します。

  • 幅または高さまたは座標は負または非整数です<br> intval()関数を使用して、パラメーターを渡す前に正しいタイプを確保します。

  • 元の画像リソースは空です<br> 画像パスが正しく、PHPがGD拡張機能を有効にしていることを確認してください。


6。概要

  • 画像学は、長方形の領域の明確で正しい収穫を必要とします。

  • 座標xyは左上隅の位置を指し、幅と高さは正の整数でなければならず、元の画像範囲を超えることはできません。

  • 事前に画像サイズを取得して、トリミングパラメーターの正当性を確認します。

  • プログラムの例外を避けるために、コードのエラーを必ず確認してください。

これらの重要なポイントを正しく理解することで、PHPの画像トリミング機能を効率的かつ安定的に完了することができます。