---
title: 座標とバウンディングボックス
url: https://platform.claude.com/docs/ja/build-with-claude/vision-coordinates
description: Claudeが画像をリサイズする仕組みと、バウンディングボックス、ポイント、UI要素についてClaudeが返すピクセル座標の扱い方を説明します。
---

Claudeは、画像内の領域を特定してラベル付けできます（たとえば、表、フォームフィールド、グラフ要素、UIコンポーネントの「bounding box」（バウンディングボックス）を返すなど）。このガイドでは、Claudeが画像を処理する前にどのようにリサイズするかを説明します。また、ボックスやポイントが元の画像と一致するように、Claudeが返すピクセル座標を扱う方法も説明します。

この知識は、OCRパイプライン、フォーム抽出、グラフ解析、UI要素の位置特定など、画像の特定の領域に対して操作を行うあらゆるタスクで必要になります。画像の送信方法、サポートされている形式、モデルごとの解像度の制限については、[Vision](https://platform.claude.com/docs/ja/build-with-claude/vision)を参照してください。

<Note>
  **Claudeは絶対ピクセル座標で最も良い結果を出します。** プロンプトで明示的にピクセル座標を要求してください。例：*「各表のバウンディングボックスを、ピクセル座標で `[x1, y1, x2, y2]`（左上と右下の角）として返してください。」* 一方、「normalized coordinates」（正規化座標）を要求すると、Claudeはうまく機能しません。たとえば、*「`0` から `1000` の範囲でバウンディングボックスの座標を返してください。」* のような要求です。常にピクセル座標を要求し、必要であれば独自のコードで正規化してください。座標を文章ではなく機械可読なJSONとして取得するには、[structured outputs](https://platform.claude.com/docs/ja/build-with-claude/structured-outputs)（構造化出力）でスキーマを定義します。たとえば、検出された要素ごとに `[x1, y1, x2, y2]` 配列を持つオブジェクトを定義します。
</Note>

座標は標準的な画像の規則に従います。原点 `(0, 0)` は画像の左上隅で、xは右方向に、yは下方向に増加します。Claudeが返す座標は、Claudeが見ている画像におけるピクセル位置です。これは、モデルのネイティブ解像度に収まるようにClaudeがリサイズした後の画像です（[Claudeが画像をリサイズおよびパディングする仕組み](https://platform.claude.com/docs/ja/build-with-claude/vision-coordinates#how-claude-resizes-and-pads-images)を参照）。そのまま使用できる座標を得るには、次のいずれかの方法を取ります。

* 座標が手元の画像に1対1で対応するように、画像を事前にリサイズする（[アップロード前に画像をリサイズする](https://platform.claude.com/docs/ja/build-with-claude/vision-coordinates#resize-your-image-before-uploading)を参照）
* Claudeが返す座標を再スケーリングする（[事前リサイズできない場合に座標を再スケーリングする](https://platform.claude.com/docs/ja/build-with-claude/vision-coordinates#rescale-coordinates-when-you-cannot-pre-resize)を参照）

<Note>
  Claudeの空間推論には限界があります（[制限事項](https://platform.claude.com/docs/ja/build-with-claude/vision#limitations)を参照）。座標の精度を最も高めるには、期待する座標形式をプロンプトで明記し、大規模に処理する前に結果を目視でスポットチェックしてください。画像が縮小されると、小さな要素の精度は低下します。細かいターゲットを扱う場合は、対象領域を切り抜いてその画像を送信する（返された座標には切り抜きの原点分のオフセットを加える）か、高解像度ティアのモデルを使用してください。[PDFサポート](https://platform.claude.com/docs/ja/build-with-claude/pdf-support)では、ページはユーザーが制御できない寸法でサーバー側で画像にラスタライズされます。そのため、返された座標をページ上に確実にマッピングし直すことはできません。PDFコンテンツで座標を扱うには、ページを自分で画像にラスタライズし、事前リサイズのアプローチを使用してください。
</Note>

## Claudeが画像をリサイズおよびパディングする仕組み

Claudeは、モデルの2つの画像制限を両方とも満たす、アスペクト比を維持した最大のサイズを求めます。

1. **辺の制限：** どちらの辺も最大辺長（標準ティアでは1568 px、高解像度ティアでは2576 px）を超えないこと。
2. **ビジュアルトークンの制限：** 画像のトークンコスト `⌈width / 28⌉ × ⌈height / 28⌉` が、モデルのビジュアルトークン予算（標準ティアでは1568トークン、高解像度ティアでは4784トークン）を超えないこと。

どのモデルがどのティアに属するかについては、[解像度とトークンコスト](https://platform.claude.com/docs/ja/build-with-claude/vision#evaluate-image-size)を参照してください。

ほぼすべての写真やスクリーンショットでは、最終的なサイズを決めるのはビジュアルトークンの制限です。辺の制限が効くのは、パノラマや縦長のスマートフォンのスクリーンショットなど、細長い画像の場合だけです。サイズは、辺の長さに合わせて手作業でスケーリングするのではなく、[リファレンス実装](https://platform.claude.com/docs/ja/build-with-claude/vision-coordinates#resize-your-image-before-uploading)で計算してください。たとえば、1920×1080のスクリーンショットは1568×882ではなく1456×819にリサイズされます。辺の制限だけを前提にすると、すべての座標がターゲットから目に見えてずれます。

トークン制限は、どちらの辺も辺の制限を超えていない場合でもリサイズを引き起こすことがあります。これを見落とすことが、座標がずれる最も一般的な原因です。たとえば、130 DPIでスキャンしたA4ページは1075×1520ピクセルです。両辺とも1568 px未満ですが、コストは `39 × 55 = 2145` ビジュアルトークンになるため、Claudeはこの画像を924×1307にリサイズします。

<Note>
  この例は、標準解像度ティアのモデルを前提としています。高解像度ティアのモデルでは、同じスキャンはリサイズされません。2145トークンは4784トークンの予算内に収まるため、返される座標は1075×1520の元画像にそのまま対応します。モデルのティアは[解像度とトークンコスト](https://platform.claude.com/docs/ja/build-with-claude/vision#evaluate-image-size)に記載されています。
</Note>

次にClaudeは、リサイズの有無にかかわらず、すべての画像の下端と右端に「padding」（パディング）を追加し、28ピクセルの倍数に切り上げます（この例では924×1307が924×1316になります）。パディング部分にはコンテンツは含まれません。Claudeはパディング後の画像を認識しますが、ページのコンテンツが占めるのは、常にパディング前のリサイズ後の領域だけです。**正規化や再スケーリングには、パディング後の寸法ではなく、必ずリサイズ後の寸法を使用してください。** パディング後の寸法で割ると、すべての座標がわずかにずれます。

## アップロード前に画像をリサイズする

最も信頼性の高い方法は、アップロード前に自分で画像をリサイズすることです。こうすると、手元の画像がClaudeの見る画像とまったく同じになり、Claudeが返す座標を変換する必要がなくなります。

まず、使用するモデルがどの解像度ティアに属するかを確認し（[解像度とトークンコスト](https://platform.claude.com/docs/ja/build-with-claude/vision#evaluate-image-size)を参照）、そのティアに対応する辺とトークンの制限を渡します。次のリファレンス実装は、Claudeが画像をリサイズする正確なサイズを計算します。

<CodeGroup exclude="shell">
  <CodeGroupItem language="cURL">
    このサイズはコードで計算してください。
  </CodeGroupItem>

  <CodeGroupItem language="CLI">
    このサイズはコードで計算してください。
  </CodeGroupItem>

  ```python Python
  import math


  def count_image_tokens(width: int, height: int) -> int:
      """Visual tokens consumed by an image: one token per 28x28 pixel patch."""
      return math.ceil(width / 28) * math.ceil(height / 28)


  def resized_size(
      width: int,
      height: int,
      max_edge: int = 1568,
      max_tokens: int = 1568,
  ) -> tuple[int, int]:
      """The size Claude resizes an image to before padding.

      Defaults are for the standard resolution tier. For high-resolution-tier
      models, use max_edge=2576 and max_tokens=4784. Returns (width, height).
      Images that already fit within the limits are returned unchanged.
      """

      def fits(w: int, h: int) -> bool:
          return (
              math.ceil(w / 28) * 28 <= max_edge
              and math.ceil(h / 28) * 28 <= max_edge
              and count_image_tokens(w, h) <= max_tokens
          )

      if fits(width, height):
          return (width, height)
      if height > width:
          resized_h, resized_w = resized_size(height, width, max_edge, max_tokens)
          return (resized_w, resized_h)

      # 長辺に沿って二分探索し、アスペクト比を保ったまま収まる
      # 最大サイズを求めます。
      aspect_ratio = width / height
      lo, hi = 1, width  # lo always fits; hi never fits
      while lo + 1 < hi:
          mid = (lo + hi) // 2
          if fits(mid, max(round(mid / aspect_ratio), 1)):
              lo = mid
          else:
              hi = mid
      return (lo, max(round(lo / aspect_ratio), 1))


  # 「Claude が画像をリサイズ・パディングする方法」の A4 の例：
  print(resized_size(1075, 1520))  # (924, 1307)

  # リサイズを適用するには、Pillow などの画像ライブラリを使用します：
  # image.resize(resized_size(*image.size))
  ```

  ```typescript TypeScript
  /** Visual tokens consumed by an image: one token per 28x28 pixel patch. */
  function countImageTokens(width: number, height: number): number {
    return Math.ceil(width / 28) * Math.ceil(height / 28);
  }

  /**
   * Round half to even (banker's rounding), matching Python's round(). The
   * live API resolves exact .5 ties toward the even neighbor, so Math.round
   * (which rounds halves up) would compute a different size for some images.
   */
  function roundTiesToEven(value: number): number {
    const floor = Math.floor(value);
    if (value - floor !== 0.5) {
      return Math.round(value);
    }
    return floor % 2 === 0 ? floor : floor + 1;
  }

  /**
   * The size Claude resizes an image to before padding.
   *
   * Defaults are for the standard resolution tier. For high-resolution-tier
   * models, use maxEdge = 2576 and maxTokens = 4784. Returns [width, height].
   * Images that already fit within the limits are returned unchanged.
   */
  function resizedSize(
    width: number,
    height: number,
    maxEdge = 1568,
    maxTokens = 1568
  ): [number, number] {
    const fits = (w: number, h: number): boolean =>
      Math.ceil(w / 28) * 28 <= maxEdge &&
      Math.ceil(h / 28) * 28 <= maxEdge &&
      countImageTokens(w, h) <= maxTokens;

    if (fits(width, height)) {
      return [width, height];
    }
    if (height > width) {
      const [resizedH, resizedW] = resizedSize(height, width, maxEdge, maxTokens);
      return [resizedW, resizedH];
    }

    // 長辺に沿って二分探索し、アスペクト比を保ったまま収まる
    // 最大サイズを求めます。
    const aspectRatio = width / height;
    let lo = 1; // lo always fits
    let hi = width; // hi never fits
    while (lo + 1 < hi) {
      const mid = Math.floor((lo + hi) / 2);
      if (fits(mid, Math.max(roundTiesToEven(mid / aspectRatio), 1))) {
        lo = mid;
      } else {
        hi = mid;
      }
    }
    return [lo, Math.max(roundTiesToEven(lo / aspectRatio), 1)];
  }

  // 「Claude による画像のリサイズとパディング」の A4 の例：
  console.log(resizedSize(1075, 1520)); // [ 924, 1307 ]

  // リサイズを適用するには、sharp などの画像ライブラリを使用します：
  // await sharp(input).resize(width, height).toBuffer()
  ```

  ```csharp C#
  // 画像が消費するビジュアルトークン数：28x28 ピクセルのパッチごとに 1 トークン。
  static int CountImageTokens(int width, int height)
  {
      return (width + 27) / 28 * ((height + 27) / 28); // ceil(w/28) * ceil(h/28)
  }

  // Claude がパディング前に画像をリサイズするサイズ。デフォルトは標準解像度ティア用。
  // 高解像度ティアのモデルでは maxEdge: 2576, maxTokens: 4784 を渡します。
  // すでに制限内に収まっている画像はそのまま返されます。
  // 
  static (int Width, int Height) ResizedSize(
      int width, int height, int maxEdge = 1568, int maxTokens = 1568)
  {
      bool Fits(int w, int h) =>
          (w + 27) / 28 * 28 <= maxEdge
          && (h + 27) / 28 * 28 <= maxEdge
          && CountImageTokens(w, h) <= maxTokens;

      if (Fits(width, height))
      {
          return (width, height);
      }
      if (height > width)
      {
          (int resizedH, int resizedW) = ResizedSize(height, width, maxEdge, maxTokens);
          return (resizedW, resizedH);
      }

      // 長辺に沿って二分探索し、アスペクト比を保ったまま収まる最大サイズを求めます。
      // 短辺は偶数丸め（half to even）で、ちょうど .5 のときライブ API と一致します
      // （MidpointRounding.ToEven、Math.Round のデフォルト）。
      double aspectRatio = (double)width / height;
      int lo = 1; // lo always fits
      int hi = width; // hi never fits
      while (lo + 1 < hi)
      {
          int mid = (lo + hi) / 2;
          if (Fits(mid, ShortEdge(mid)))
          {
              lo = mid;
          }
          else
          {
              hi = mid;
          }
      }
      return (lo, ShortEdge(lo));

      int ShortEdge(int longEdge) =>
          Math.Max((int)Math.Round(longEdge / aspectRatio, MidpointRounding.ToEven), 1);
  }

  // 「Claude が画像をリサイズ・パディングする方法」の A4 の例：
  Console.WriteLine(ResizedSize(1075, 1520)); // (924, 1307)
  ```

  ```go Go
  // countImageTokens は画像が消費するビジュアルトークン数：28x28 ピクセルの
  // パッチごとに 1 トークンです。
  func countImageTokens(width, height int) int {
  	return ((width + 27) / 28) * ((height + 27) / 28) // ceil(w/28) * ceil(h/28)
  }

  // resizedSize は Claude がパディング前に画像をリサイズするサイズを
  // (width, height) で返します。標準解像度ティアでは maxEdge 1568 と maxTokens 1568、
  // 高解像度ティアでは 2576 と 4784 を渡します。すでに制限内に
  // 収まる画像はそのまま返されます。
  // 「Claude が画像をリサイズ・パディングする方法」の A4 の例：
  // resizedSize(1075, 1520, 1568, 1568) は (924, 1307) を返します。
  func resizedSize(width, height, maxEdge, maxTokens int) (int, int) {
  	fits := func(w, h int) bool {
  		return ((w+27)/28)*28 <= maxEdge &&
  			((h+27)/28)*28 <= maxEdge &&
  			countImageTokens(w, h) <= maxTokens
  	}

  	if fits(width, height) {
  		return width, height
  	}
  	if height > width {
  		resizedH, resizedW := resizedSize(height, width, maxEdge, maxTokens)
  		return resizedW, resizedH
  	}

  	// 長辺に沿って二分探索し、アスペクト比を保ったまま収まる最大サイズを
  	// 求めます。短辺は偶数丸め（math.RoundToEven）で、ちょうど .5 の場合も
  	// ライブ API と一致します。math.Round では切り上げになってしまいます。
  	aspectRatio := float64(width) / float64(height)
  	lo, hi := 1, width // lo always fits; hi never fits
  	for lo+1 < hi {
  		mid := (lo + hi) / 2
  		short := max(int(math.RoundToEven(float64(mid)/aspectRatio)), 1)
  		if fits(mid, short) {
  			lo = mid
  		} else {
  			hi = mid
  		}
  	}
  	return lo, max(int(math.RoundToEven(float64(lo)/aspectRatio)), 1)
  }
  ```

  ```java Java
  /** A resized image size, as returned by resizedSize. */
  record Size(int width, int height) {}

  /** Visual tokens consumed by an image: one token per 28x28 pixel patch. */
  static int countImageTokens(int width, int height) {
      return Math.ceilDiv(width, 28) * Math.ceilDiv(height, 28);
  }

  /**
   * The size Claude resizes an image to before padding.
   *
   * <p>Pass maxEdge 1568 and maxTokens 1568 for the standard resolution tier,
   * or 2576 and 4784 for the high-resolution tier. Images that already fit
   * within the limits are returned unchanged.
   *
   * <p>The A4 example from "How Claude resizes and pads images":
   * resizedSize(1075, 1520, 1568, 1568) returns new Size(924, 1307).
   */
  static Size resizedSize(int width, int height, int maxEdge, int maxTokens) {
      if (fits(width, height, maxEdge, maxTokens)) {
          return new Size(width, height);
      }
      if (height > width) {
          Size rotated = resizedSize(height, width, maxEdge, maxTokens);
          return new Size(rotated.height(), rotated.width());
      }

      // 長辺に沿って二分探索し、収まる範囲でアスペクト比を保つ最大の
      // サイズを求めます。短辺は偶数丸め（Math.rint）で、
      // ちょうど .5 の場合に実際の API と一致します。Math.round では切り上げになります。
      double aspectRatio = (double) width / height;
      int lo = 1; // lo always fits
      int hi = width; // hi never fits
      while (lo + 1 < hi) {
          int mid = (lo + hi) / 2;
          if (fits(mid, shortEdge(mid, aspectRatio), maxEdge, maxTokens)) {
              lo = mid;
          } else {
              hi = mid;
          }
      }
      return new Size(lo, shortEdge(lo, aspectRatio));
  }

  private static boolean fits(int width, int height, int maxEdge, int maxTokens) {
      return Math.ceilDiv(width, 28) * 28 <= maxEdge
              && Math.ceilDiv(height, 28) * 28 <= maxEdge
              && countImageTokens(width, height) <= maxTokens;
  }

  private static int shortEdge(int longEdge, double aspectRatio) {
      return Math.max((int) Math.rint(longEdge / aspectRatio), 1);
  }
  ```

  ```php PHP
  // 画像が消費するビジュアルトークン数：28x28 ピクセルパッチごとに 1 トークン。
  function countImageTokens(int $width, int $height): int
  {
      return intdiv($width + 27, 28) * intdiv($height + 27, 28);
  }

  /**
   * The size Claude resizes an image to before padding, as [width, height].
   *
   * Defaults are for the standard resolution tier. For high-resolution-tier
   * models, pass maxEdge: 2576, maxTokens: 4784. Images that already fit
   * within the limits are returned unchanged.
   */
  function resizedSize(int $width, int $height, int $maxEdge = 1568, int $maxTokens = 1568): array
  {
      $fits = fn (int $w, int $h): bool =>
          intdiv($w + 27, 28) * 28 <= $maxEdge
          && intdiv($h + 27, 28) * 28 <= $maxEdge
          && countImageTokens($w, $h) <= $maxTokens;

      if ($fits($width, $height)) {
          return [$width, $height];
      }
      if ($height > $width) {
          [$resizedH, $resizedW] = resizedSize($height, $width, $maxEdge, $maxTokens);
          return [$resizedW, $resizedH];
      }

      // 長辺に沿って二分探索し、アスペクト比を保ったまま収まる最大サイズを
      // 求めます。短辺は偶数丸め（PHP_ROUND_HALF_EVEN）で、
      // ちょうど .5 の場合にライブ API と一致します。
      $aspectRatio = $width / $height;
      $lo = 1; // lo always fits
      $hi = $width; // hi never fits
      while ($lo + 1 < $hi) {
          $mid = intdiv($lo + $hi, 2);
          $short = max((int) round($mid / $aspectRatio, 0, PHP_ROUND_HALF_EVEN), 1);
          if ($fits($mid, $short)) {
              $lo = $mid;
          } else {
              $hi = $mid;
          }
      }

      return [$lo, max((int) round($lo / $aspectRatio, 0, PHP_ROUND_HALF_EVEN), 1)];
  }

  // 「Claude による画像のリサイズとパディング方法」の A4 の例：
  [$resizedWidth, $resizedHeight] = resizedSize(1075, 1520);
  echo "({$resizedWidth}, {$resizedHeight})\n"; // (924, 1307)
  ```

  ```ruby Ruby
  # 画像が消費するビジュアルトークン数：28x28 ピクセルのパッチごとに 1 トークン。
  def count_image_tokens(width, height)
    width.ceildiv(28) * height.ceildiv(28)
  end

  # Claude がパディング前に画像をリサイズするサイズ（[width, height] 形式）。
  #
  # デフォルトは標準解像度ティア用です。高解像度ティアのモデルでは
  # max_edge: 2576, max_tokens: 4784 を渡します。すでに制限内に収まる画像は
  # そのまま返されます。
  def resized_size(width, height, max_edge = 1568, max_tokens = 1568)
    fits = lambda do |w, h|
      w.ceildiv(28) * 28 <= max_edge &&
        h.ceildiv(28) * 28 <= max_edge &&
        count_image_tokens(w, h) <= max_tokens
    end

    return [width, height] if fits.call(width, height)

    if height > width
      resized_h, resized_w = resized_size(height, width, max_edge, max_tokens)
      return [resized_w, resized_h]
    end

    # 長辺に沿って二分探索し、アスペクト比を保ったまま収まる最大サイズを
    # 求めます。短辺は偶数丸め（round(half: :even)）で、ちょうど .5 の場合に
    # 実際の API と一致します。
    aspect_ratio = width.fdiv(height)
    lo = 1      # lo always fits
    hi = width  # hi never fits
    while lo + 1 < hi
      mid = (lo + hi) / 2
      short = [(mid / aspect_ratio).round(half: :even), 1].max
      if fits.call(mid, short)
        lo = mid
      else
        hi = mid
      end
    end

    [lo, [(lo / aspect_ratio).round(half: :even), 1].max]
  end

  # 「Claude が画像をリサイズ・パディングする方法」の A4 の例：
  p resized_size(1075, 1520) # => [924, 1307]
  ```
</CodeGroup>

1. リサイズヘルパーが返す寸法に画像をリサイズします。画像がすでにモデルの制限内に収まっている場合、ヘルパーは元の寸法をそのまま返すため、リサイズは不要です。
2. [リサイズした画像をAPIに送信](https://platform.claude.com/docs/ja/build-with-claude/vision#send-images-to-claude)します。自分でパディングを追加しないでください。パディングはClaudeが処理し、パディングによって座標の原点がずれることはありません。
3. プロンプトで、ピクセル座標を明示的に要求します。例：*「Submitボタンのクリックポイントを、ピクセル座標で `[x, y]` として返してください。」*
4. 返された座標は、送信した画像に対してそのまま使用します。正規化座標が必要な場合は、送信した画像の寸法で割ってください。元の画像の寸法やパディング後の寸法で割ってはいけません。

<Note>
  [トークンカウント](https://platform.claude.com/docs/ja/build-with-claude/token-counting)エンドポイントは、画像を完全には処理せず、寸法から画像のトークンコストを推定します。そのため、カウントが成功しても、画像がMessages APIの[リクエスト制限](https://platform.claude.com/docs/ja/build-with-claude/vision#request-limits)内に収まっているとは限りません。カウントに成功した画像でも、送信時に拒否される場合があります。
</Note>

## `transformations` でリサイズをエラーにする

事前リサイズで座標を保護できるのは、パイプラインが正しいサイズの画像を生成し続けている間だけです。新しい画像ソースを追加したり、異なる解像度ティアのモデルに切り替えたりすると、サーバー側のリサイズが気づかないうちに再び発生する可能性があります。このような気づきにくいずれを目に見えるエラーにするには、[Messages](https://platform.claude.com/docs/ja/api/messages)リクエストの画像コンテンツブロックに、オプションの `transformations` フィールドを設定します。

```json
{
  "type": "image",
  "source": { "type": "base64", "media_type": "image/png", "data": "..." },
  "transformations": { "oversized_image": "error" }
}
```

マークされた画像（`"oversized_image": "error"` を設定したブロック）がリサイズの対象になる場合、そのリクエストは400 `invalid_request_error` で拒否されます。エラーには、画像の寸法と、制限内に収まる最大の寸法が示されます。画像が拒否されるかどうかは、[リクエストで指定されたすべてのモデルの制限](https://platform.claude.com/docs/ja/build-with-claude/vision-coordinates#how-claude-resizes-and-pads-images)によって決まります。以下の1920×1080の例は、標準ティアのモデルでは拒否されますが、高解像度ティアの制限内には収まります。

```text wrap
messages.0.content.0: image dimensions 1920x1080 exceed the maximum image size of a model named on this request and would be downsized to 1456x819; scale the image to at most 1456x819 or set the image's oversized_image setting to "downsize"
```

報告されたターゲットサイズに再スケーリングして、再送信してください。ターゲットサイズは、画像のアスペクト比を保ったまま、リクエストで指定されたすべてのモデルが受け入れる最大のサイズです。マークされた画像と[サーバー側フォールバックベータ](https://platform.claude.com/docs/ja/build-with-claude/refusals-and-fallback#server-side-fallback)との関係については、その機能のページで説明しています。どのモードでも、マークされた画像がリサイズされた状態で処理されることはありません。

この設定は画像ごとに指定します。`"oversized_image": "downsize"`（フィールドを省略した場合のデフォルト）を指定すると、このページで説明したとおり自動リサイズが行われます。各画像ブロックは自身の設定に対してのみチェックされます。そのため、1つのリクエストの中で、寸法が重要な画像（クリック操作の対象となるスクリーンショットなど）と、リサイズされても問題のない画像（ロゴなど）を混在させることができます。この設定によって変わる点と変わらない点は次のとおりです。

* パディング（[コンテンツを破棄することはありません](https://platform.claude.com/docs/ja/build-with-claude/vision-coordinates#how-claude-resizes-and-pads-images)）、形式変換、向きの補正は通常どおり行われます。
* ハード制限（最長辺8000 px、および[多数の画像を含むリクエスト](https://platform.claude.com/docs/ja/build-with-claude/vision#request-limits)に適用される、より厳しい画像ごとの制限）による拒否は、この設定とは別に行われます。この設定によって、画像がこれらの制限を回避できることはありません。
* URLまたはファイルIDで指定された画像は、バイトデータが取得された時点でチェックされます。これらの画像が拒否された場合、エラーメッセージの内容は同じですが、先頭の位置情報が含まれないため、どの画像が失敗したかは特定できません。エラーで位置が示されるのは、埋め込まれたbase64画像だけです。
* [PDFページ](https://platform.claude.com/docs/ja/build-with-claude/pdf-support)は、ユーザーが制御できない寸法でサーバー側でラスタライズされます。`document` ブロックはこのフィールドを受け付けません（ただし、ドキュメントのコンテンツ内にネストされた画像ブロックは、他の画像ブロックと同様にこのフィールドを受け付けます）。
* 寸法を特定できないマークされた画像は、そのまま通過せずに拒否されます。この場合のエラーは、上記のリサイズに関するメッセージではなく、画像のソース寸法を特定できなかったことを示します。`"error"` を設定した画像が、リサイズされた状態でモデルに届くことはありません。

[トークンカウント](https://platform.claude.com/docs/ja/build-with-claude/token-counting)エンドポイントも `transformations` に対応しており、埋め込み画像をMessages APIとまったく同じ条件で拒否します。そのため、推論を実行する前に、埋め込み画像がリサイズされずに収まるかどうかを確認できます。ただし、トークンカウントでは、URLまたはファイルIDで指定された画像は取得されずに拒否されます。そのため、これらのソースから指定したマークされた画像は、Messagesリクエストの時点でのみチェックされます。

## 事前リサイズできない場合に座標を再スケーリングする

事前リサイズができない場合（たとえば、変更できない上流システムから画像が送られてくる場合）は、[アップロード前に画像をリサイズする](https://platform.claude.com/docs/ja/build-with-claude/vision-coordinates#resize-your-image-before-uploading)のリサイズヘルパーを使用してClaudeが見た画像の寸法を求め、Claudeが返す座標を正規化座標に変換するか、元の画像上にマッピングし直します。画像で[代わりにエラーを返す設定](https://platform.claude.com/docs/ja/build-with-claude/vision-coordinates#oversized-image-error)をしていない限り、Claudeはサイズ超過の画像を拒否せずにリサイズします。ただし、これはAPIの[リクエスト制限](https://platform.claude.com/docs/ja/build-with-claude/vision#request-limits)の範囲内に限られ、制限を超えるとリクエストは検証エラーで失敗します。呼び出したモデルに対応するティアの制限を渡してください。誤ったティアの制限を渡すと、誤ったリサイズ後の寸法が求められ、すべての座標が気づかないうちにずれます。この方法では、アップロードした画像のピクセル寸法がわかっている必要があるため、PDFのアップロードには使用できません。

[computer use](https://platform.claude.com/docs/ja/agents-and-tools/tool-use/computer-use-tool#handle-coordinate-scaling-for-higher-resolutions)（コンピュータ使用）および[browser use](https://platform.claude.com/docs/ja/agents-and-tools/tool-use/browser-use-tool#targets-and-coordinates)（ブラウザ使用）のツールセットに返すスクリーンショットやズーム画像は、自動リサイズの対象外です。モデルの制限を超える `tool_result` 画像は、リサイズされずに検証エラーで拒否されます。これらの画像は、返す前にアプリケーション側でリサイズしてください。そのうえで、Claudeが返す座標を画面の寸法にスケーリングし直します。

<CodeGroup exclude="shell">
  <CodeGroupItem language="cURL">
    座標はコードで変換してください。
  </CodeGroupItem>

  <CodeGroupItem language="CLI">
    座標はコードで変換してください。
  </CodeGroupItem>

  ```python Python
  # このヘルパーは本ページのリサイズ例にある resized_size を呼び出します。
  def to_relative_coordinates(
      x: float,
      y: float,
      original_width: int,
      original_height: int,
      max_edge: int = 1568,
      max_tokens: int = 1568,
  ) -> tuple[float, float]:
      """Map a pixel coordinate returned by Claude to relative coordinates in [0, 1].

      Pass the dimensions of the image you uploaded. For high-resolution-tier
      models, use max_edge=2576 and max_tokens=4784.
      """
      resized_w, resized_h = resized_size(
          original_width, original_height, max_edge, max_tokens
      )
      return (x / resized_w, y / resized_h)


  # リサイズ後の A4 ページ上で Claude が (462, 653.5) に返す表の角は、
  # 1075x1520 の元画像上に次のようにマッピングされます：
  rel_x, rel_y = to_relative_coordinates(462, 653.5, 1075, 1520)
  print((rel_x * 1075, rel_y * 1520))  # (537.5, 760.0)
  ```

  ```typescript TypeScript
  // このヘルパーは本ページのリサイズ例にある resizedSize を呼び出します。
  /**
   * Map a pixel coordinate returned by Claude to relative coordinates in [0, 1].
   *
   * Pass the dimensions of the image you uploaded. For high-resolution-tier
   * models, use maxEdge = 2576 and maxTokens = 4784.
   */
  function toRelativeCoordinates(
    x: number,
    y: number,
    originalWidth: number,
    originalHeight: number,
    maxEdge = 1568,
    maxTokens = 1568
  ): [number, number] {
    const [resizedW, resizedH] = resizedSize(originalWidth, originalHeight, maxEdge, maxTokens);
    return [x / resizedW, y / resizedH];
  }

  // リサイズ後の A4 ページで Claude が返す (462, 653.5) のテーブル角は
  // 1075x1520 の元画像上に次のようにマッピングされます：
  const [relX, relY] = toRelativeCoordinates(462, 653.5, 1075, 1520);
  console.log([relX * 1075, relY * 1520]); // [ 537.5, 760 ]
  ```

  ```csharp C#
  // このヘルパーは本ページのリサイズ例の ResizedSize を呼び出します。
  // Claude が返すピクセル座標を [0, 1] の相対座標にマッピングします。
  // アップロードした画像の寸法と、ResizedSize に使用したのと同じティア制限を
  // 渡してください。
  static (double X, double Y) ToRelativeCoordinates(
      double x, double y, int originalWidth, int originalHeight,
      int maxEdge = 1568, int maxTokens = 1568)
  {
      (int resizedW, int resizedH) =
          ResizedSize(originalWidth, originalHeight, maxEdge, maxTokens);
      return (x / resizedW, y / resizedH);
  }

  // リサイズ後の A4 ページで Claude が (462, 653.5) として返すテーブルの角は、
  // 1075x1520 の元画像に次のようにマッピングされます：
  (double relX, double relY) = ToRelativeCoordinates(462, 653.5, 1075, 1520);
  Console.WriteLine((relX * 1075, relY * 1520)); // (537.5, 760)
  ```

  ```go Go
  // このヘルパーは本ページのリサイズ例にある resizedSize を呼び出します。

  // toRelativeCoordinates は Claude が返したピクセル座標を [0, 1] の
  // 相対座標にマッピングします。アップロードした画像の寸法と、
  // resizedSize に使用したのと同じティア制限を渡します。
  func toRelativeCoordinates(
  	x, y float64,
  	originalWidth, originalHeight, maxEdge, maxTokens int,
  ) (float64, float64) {
  	resizedW, resizedH := resizedSize(originalWidth, originalHeight, maxEdge, maxTokens)
  	return x / float64(resizedW), y / float64(resizedH)
  }

  // 元画像のピクセル空間に戻すには元の寸法を掛けます：リサイズ後の A4 ページで
  // (462, 653.5) に返された表の角は、1075x1520 の元画像上では
  // (relX*1075, relY*1520) = (537.5, 760) になります。
  ```

  ```java Java
  // このヘルパーは、このページのリサイズ例にある resizedSize を呼び出します。
  /** A coordinate scaled into the [0, 1] range on both axes. */
  record RelativeCoordinate(double x, double y) {}

  /**
   * Map a pixel coordinate returned by Claude to relative coordinates in
   * [0, 1]. Pass the dimensions of the image you uploaded, and the same tier
   * limits used for resizedSize.
   */
  static RelativeCoordinate toRelativeCoordinates(
          double x, double y, int originalWidth, int originalHeight, int maxEdge, int maxTokens) {
      Size resized = resizedSize(originalWidth, originalHeight, maxEdge, maxTokens);
      return new RelativeCoordinate(x / resized.width(), y / resized.height());
  }

  // 元画像のピクセル空間に戻すには、元の寸法を掛けます。
  // 例：リサイズ後の A4 ページで (462, 653.5) として返された表の角は、
  // 1075x1520 の元画像上では (relative.x() * 1075, relative.y() * 1520) = (537.5, 760)
  // になります。
  ```

  ```php PHP
  // このヘルパーは本ページのリサイズ例の resizedSize() を呼び出します。
  /**
   * Map a pixel coordinate returned by Claude to relative coordinates in
   * [0, 1], as [x, y]. Pass the dimensions of the image you uploaded, and the
   * same tier limits used for resizedSize.
   */
  function toRelativeCoordinates(
      float $x,
      float $y,
      int $originalWidth,
      int $originalHeight,
      int $maxEdge = 1568,
      int $maxTokens = 1568,
  ): array {
      [$resizedW, $resizedH] = resizedSize($originalWidth, $originalHeight, $maxEdge, $maxTokens);

      return [$x / $resizedW, $y / $resizedH];
  }

  // リサイズ後の A4 ページ上で Claude が (462, 653.5) として返すテーブルの角は、
  // 1075x1520 の元画像に次のようにマッピングされます：
  [$relX, $relY] = toRelativeCoordinates(462, 653.5, 1075, 1520);
  echo '(' . $relX * 1075 . ', ' . $relY * 1520 . ")\n"; // (537.5, 760)
  ```

  ```ruby Ruby
  # このヘルパーは本ページのリサイズ例の resized_size を呼び出します。
  # Claude が返すピクセル座標を [0, 1] の相対座標（[x, y] 形式）に
  # マッピングします。アップロードした画像の寸法と、resized_size で使用したのと
  # 同じティア制限を渡してください。
  def to_relative_coordinates(
    x, y, original_width, original_height, max_edge = 1568, max_tokens = 1568
  )
    resized_w, resized_h = resized_size(original_width, original_height, max_edge, max_tokens)
    [x.fdiv(resized_w), y.fdiv(resized_h)]
  end

  # リサイズされた A4 ページ上で Claude が (462, 653.5) として返すテーブルの角は、
  # 1075x1520 の元画像に次のようにマッピングされます：
  rel_x, rel_y = to_relative_coordinates(462, 653.5, 1075, 1520)
  p [rel_x * 1075, rel_y * 1520] # => [537.5, 760.0]
  ```
</CodeGroup>

パディングは下端と右端にのみ追加されるため、原点はずれません。したがって、軸ごとの線形な再スケーリングで十分です。再スケーリングの前に、返された座標をリサイズ後の寸法の範囲内にクランプしてください。こうすることで、画像のわずかに外側にあるポイントが、元の画像の外側にマッピングされるのを防げます。

相対座標は、操作対象となる面の寸法に掛けて使用します。操作対象は、元の画像、フル解像度のスキャン、画面などです。画面を操作する場合に、スクリーンショットのピクセルと論理座標が異なるとき（HiDPIディスプレイなど）は、さらにディスプレイのスケールファクターで割ってください。このパターンについては、[コンピュータ使用ツールのスケーリングに関するガイダンス](https://platform.claude.com/docs/ja/agents-and-tools/tool-use/computer-use-tool#handle-coordinate-scaling-for-higher-resolutions)で説明しています。

## 次のステップ

<CardGroup cols={2}>
  <Card title="Agent Skills" icon="stack" href="https://platform.claude.com/docs/ja/agents-and-tools/agent-skills/overview">
    Agent Skillsは、Claudeの機能を拡張するモジュール式の機能です。各Skillには、指示、メタデータ、およびオプションのリソース（スクリプト、テンプレート）がまとめられており、Claudeは必要に応じてこれらを自動的に使用します。
  </Card>

  <Card title="コンピュータ使用ツール" icon="computer" href="https://platform.claude.com/docs/ja/agents-and-tools/tool-use/computer-use-tool">
    コンピュータ使用ツールを使用すると、Claudeがデスクトップ環境のスクリーンショットを取得し、マウスとキーボードを操作できるようになります。
  </Card>

  <Card title="PDFサポート" icon="file" href="https://platform.claude.com/docs/ja/build-with-claude/pdf-support">
    ClaudeでPDFを処理します。ドキュメントからテキストを抽出し、グラフを分析し、視覚的なコンテンツを理解できます。
  </Card>

  <Card title="トークンカウント" icon="calculator" href="https://platform.claude.com/docs/ja/build-with-claude/token-counting">
    Claudeに送信する前に、メッセージ内のトークン数をカウントします。トークン数は、レート制限とコストの管理、モデルのルーティングの判断、プロンプトを目標の長さに収めることに役立ちます。
  </Card>
</CardGroup>
