---
title: Koordinaten und Bounding Boxes
url: https://platform.claude.com/docs/de/build-with-claude/vision-coordinates
description: Wie Claude Bilder skaliert und wie du mit den Pixelkoordinaten arbeitest, die es für Bounding Boxes, Punkte und UI-Elemente zurückgibt.
---

Claude kann Bereiche eines Bildes lokalisieren und beschriften (zum Beispiel „bounding boxes“ (Begrenzungsrahmen) für Tabellen, Formularfelder, Diagrammelemente oder UI-Komponenten zurückgeben). Dieser Leitfaden behandelt, wie Claude Bilder vor der Verarbeitung skaliert und wie du mit den zurückgegebenen Pixelkoordinaten arbeitest, damit Boxen und Punkte mit deinem Originalbild übereinstimmen.

Du brauchst das für OCR-Pipelines, Formularextraktion, Diagramm-Parsing, die Lokalisierung von UI-Elementen und jede Aufgabe, bei der du auf einen bestimmten Bereich eines Bildes einwirkst. Informationen zum Senden von Bildern, zu unterstützten Formaten und zu modellspezifischen Auflösungsgrenzen findest du unter [Vision](https://platform.claude.com/docs/de/build-with-claude/vision).

<Note>
  **Claude arbeitet am besten mit absoluten Pixelkoordinaten.** Fordere sie in deinem Prompt ausdrücklich an. Zum Beispiel: *„Gib die Bounding Box jeder Tabelle als `[x1, y1, x2, y2]` (obere linke und untere rechte Ecke) in Pixelkoordinaten zurück."* Claude arbeitet nicht gut, wenn du nach normalisierten Koordinaten fragst, zum Beispiel: *„Gib Bounding-Box-Koordinaten zwischen `0` und `1000` zurück."* Frage immer nach Pixelkoordinaten und normalisiere bei Bedarf in deinem eigenen Code. Um Koordinaten als maschinenlesbares JSON statt als Fließtext zu erhalten, definiere ein Schema mit [strukturierten Ausgaben](https://platform.claude.com/docs/de/build-with-claude/structured-outputs), zum Beispiel ein Objekt mit einem `[x1, y1, x2, y2]`-Array pro erkanntem Element.
</Note>

Koordinaten folgen der üblichen Bildkonvention: Der Ursprung `(0, 0)` ist die obere linke Ecke des Bildes, wobei x nach rechts und y nach unten zunimmt. Die Koordinaten, die Claude zurückgibt, sind Pixelpositionen in dem Bild, das Claude sieht: dein Bild, nachdem Claude es auf die native Auflösung des Modells skaliert hat (siehe [Wie Claude Bilder skaliert und auffüllt](https://platform.claude.com/docs/de/build-with-claude/vision-coordinates#how-claude-resizes-and-pads-images)). Um Koordinaten zu erhalten, die du direkt verwenden kannst, skaliere dein Bild entweder vorab, sodass die Koordinaten eins zu eins auf das Bild abgebildet werden, das du hast (siehe [Skaliere dein Bild vor dem Hochladen](https://platform.claude.com/docs/de/build-with-claude/vision-coordinates#resize-your-image-before-uploading)), oder skaliere die von Claude zurückgegebenen Koordinaten um (siehe [Koordinaten umskalieren, wenn du nicht vorab skalieren kannst](https://platform.claude.com/docs/de/build-with-claude/vision-coordinates#rescale-coordinates-when-you-cannot-pre-resize)).

<Note>
  Claudes räumliches Denken hat Grenzen (siehe [Einschränkungen](https://platform.claude.com/docs/de/build-with-claude/vision#limitations)). Die Koordinatengenauigkeit ist am besten, wenn du das erwartete Koordinatenformat in deinem Prompt angibst und Ergebnisse visuell stichprobenartig prüfst, bevor du in großem Umfang verarbeitest. Kleine Elemente verlieren an Präzision, wenn ein Bild herunterskaliert wird: Schneide bei feinen Zielen den relevanten Bereich aus und sende den Ausschnitt (verschiebe die zurückgegebenen Koordinaten um den Ursprung des Ausschnitts), oder verwende ein Modell der hochauflösenden Stufe. Bei der [PDF-Unterstützung](https://platform.claude.com/docs/de/build-with-claude/pdf-support) werden Seiten serverseitig in Bilder mit Abmessungen gerastert, die du nicht kontrollierst, sodass die zurückgegebenen Koordinaten nicht zuverlässig auf die Seite zurückabgebildet werden können. Um mit Koordinaten auf PDF-Inhalten zu arbeiten, rastere die Seiten selbst in Bilder und verwende den Ansatz mit Vorab-Skalierung.
</Note>

## Wie Claude Bilder skaliert und auffüllt

Claude ermittelt die größte seitenverhältniserhaltende Größe, die beide Bildgrenzen des Modells erfüllt:

1. **Kantengrenze:** Keine Seite überschreitet die maximale Kantenlänge (1568 px auf der Standardstufe, 2576 px auf der hochauflösenden Stufe).
2. **Grenze für visuelle Token:** Die Token-Kosten des Bildes `⌈width / 28⌉ × ⌈height / 28⌉` überschreiten nicht das Budget des Modells für visuelle Token (1568 Token auf der Standardstufe, 4784 auf der hochauflösenden Stufe).

Unter [Auflösung und Token-Kosten](https://platform.claude.com/docs/de/build-with-claude/vision#evaluate-image-size) findest du, welche Modelle zu welcher Stufe gehören.

Bei fast allen Fotos und Screenshots bestimmt die Grenze für visuelle Token die endgültige Größe. Die Kantengrenze greift nur bei langgestreckten Bildern wie Panoramen oder hohen Smartphone-Screenshots. Berechne die Größe mit der [Referenzimplementierung](https://platform.claude.com/docs/de/build-with-claude/vision-coordinates#resize-your-image-before-uploading), statt von Hand auf die Kantenlänge zu skalieren: Ein 1920×1080-Screenshot wird auf 1456×819 skaliert, nicht auf 1568×882, und die Annahme der Kantengrenze verschiebt jede Koordinate merklich vom Ziel.

Die Token-Grenze kann auch dann eine Skalierung auslösen, wenn keine Seite die Kantengrenze überschreitet. Dies zu übersehen ist die häufigste Ursache für falsch ausgerichtete Koordinaten. Eine mit 130 DPI gescannte A4-Seite ist zum Beispiel 1075×1520 Pixel groß: Beide Seiten liegen unter 1568 px, aber sie kostet `39 × 55 = 2145` visuelle Token, sodass Claude sie auf 924×1307 skaliert.

<Note>
  Dieses Beispiel geht von einem Modell der Standard-Auflösungsstufe aus. Ein Modell der hochauflösenden Stufe skaliert denselben Scan nicht: 2145 Token liegen innerhalb seines Budgets von 4784 Token, sodass die zurückgegebenen Koordinaten direkt auf das 1075×1520-Original abgebildet werden. Die Modellstufen sind unter [Auflösung und Token-Kosten](https://platform.claude.com/docs/de/build-with-claude/vision#evaluate-image-size) aufgeführt.
</Note>

Claude füllt dann jedes Bild, ob skaliert oder nicht, an der unteren und rechten Kante bis zum nächsten Vielfachen von 28 Pixeln auf („padding“ (Auffüllung); 924×1307 wird im Beispiel zu 924×1316). Das Padding enthält keinen Inhalt: Claude nimmt das aufgefüllte Bild wahr, aber der Seiteninhalt belegt immer nur den nicht aufgefüllten, skalierten Bereich. **Normalisiere oder skaliere immer anhand der skalierten Abmessungen, nicht der aufgefüllten Abmessungen**; das Teilen durch die aufgefüllten Abmessungen verschiebt jede Koordinate um einen kleinen Betrag.

## Skaliere dein Bild vor dem Hochladen

Der zuverlässigste Ansatz ist, dein Bild vor dem Hochladen selbst zu skalieren, sodass das Bild, das du hast, genau das Bild ist, das Claude sieht, und die von Claude zurückgegebenen Koordinaten keine Umrechnung benötigen.

Prüfe zuerst, auf welcher Auflösungsstufe sich dein Modell befindet (siehe [Auflösung und Token-Kosten](https://platform.claude.com/docs/de/build-with-claude/vision#evaluate-image-size)), und übergib die passenden Kanten- und Token-Grenzen. Die folgende Referenzimplementierung berechnet die genaue Größe, auf die Claude ein Bild skaliert:

<CodeGroup exclude="shell">
  <CodeGroupItem language="cURL">
    Berechne diese Größe im Code.
  </CodeGroupItem>

  <CodeGroupItem language="CLI">
    Berechne diese Größe im Code.
  </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)

      # Binärsuche entlang der langen Kante nach der größten seitenverhältnis-
      # treuen Größe, die passt.
      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))


  # Das A4-Beispiel aus „How Claude resizes and pads images“:
  print(resized_size(1075, 1520))  # (924, 1307)

  # Für das Resize nutze deine Bildbibliothek, z. B. 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];
    }

    // Binärsuche entlang der langen Kante nach der größten seitenverhältnis-
    // wahrenden Größe, die passt.
    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)];
  }

  // Das A4-Beispiel aus „Wie Claude Bilder skaliert und auffüllt“:
  console.log(resizedSize(1075, 1520)); // [ 924, 1307 ]

  // Verwende zum Skalieren deine Bildbibliothek, zum Beispiel sharp:
  // await sharp(input).resize(width, height).toBuffer()
  ```

  ```csharp C#
  // Visuelle Tokens, die ein Bild verbraucht: ein Token pro 28x28-Pixel-Patch.
  static int CountImageTokens(int width, int height)
  {
      return (width + 27) / 28 * ((height + 27) / 28); // ceil(w/28) * ceil(h/28)
  }

  // Die Größe, auf die Claude ein Bild vor dem Padding skaliert. Defaults gelten
  // für die Standard-Auflösungsstufe; für High-Resolution-Tier-Modelle übergib
  // maxEdge: 2576, maxTokens: 4784. Bilder, die bereits in die Limits passen,
  // werden unverändert zurückgegeben.
  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);
      }

      // Binärsuche entlang der langen Kante nach der größten seitenverhältnis-
      // treuen Größe, die passt. Die kurze Kante rundet .5 auf gerade, wie die
      // Live-API bei exakten .5-Ties (MidpointRounding.ToEven, Math.Round-Default).
      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);
  }

  // Das A4-Beispiel aus "How Claude resizes and pads images":
  Console.WriteLine(ResizedSize(1075, 1520)); // (924, 1307)
  ```

  ```go Go
  // countImageTokens ist die Anzahl visueller Token, die ein Bild verbraucht:
  // ein Token pro 28x28-Pixel-Patch.
  func countImageTokens(width, height int) int {
  	return ((width + 27) / 28) * ((height + 27) / 28) // ceil(w/28) * ceil(h/28)
  }

  // resizedSize ist die Größe, auf die Claude ein Bild vor dem Padding skaliert,
  // als (width, height). Übergib maxEdge 1568 und maxTokens 1568 für die
  // Standard-Auflösungsstufe oder 2576 und 4784 für die hochauflösende Stufe.
  // Bilder, die bereits innerhalb der Limits liegen, werden unverändert zurückgegeben.
  // Das A4-Beispiel aus „How Claude resizes and pads images“:
  // resizedSize(1075, 1520, 1568, 1568) gibt (924, 1307) zurück.
  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
  	}

  	// Binärsuche entlang der langen Kante nach der größten seitenverhältnistreuen
  	// Größe, die passt. Die kurze Kante rundet .5 auf gerade (math.RoundToEven),
  	// passend zur Live-API bei exakten .5-Werten; math.Round würde aufrunden.
  	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());
      }

      // Binärsuche entlang der langen Kante nach der größten seitenverhältnistreuen
      // Größe, die passt. Die kurze Kante rundet .5 auf gerade (Math.rint),
      // passend zur Live-API bei exakten .5-Werten; Math.round würde sie aufrunden.
      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
  // Visuelle Tokens, die ein Bild verbraucht: ein Token pro 28x28-Pixel-Patch.
  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];
      }

      // Binäre Suche entlang der langen Kante nach der größten seitenverhältnis-
      // treuen Größe, die passt. Die kurze Kante rundet .5 auf gerade
      // (PHP_ROUND_HALF_EVEN), passend zur Live-API bei exakten .5-Ties.
      $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)];
  }

  // Das A4-Beispiel aus „Wie Claude Bilder skaliert und auffüllt“:
  [$resizedWidth, $resizedHeight] = resizedSize(1075, 1520);
  echo "({$resizedWidth}, {$resizedHeight})\n"; // (924, 1307)
  ```

  ```ruby Ruby
  # Visuelle Tokens, die ein Bild verbraucht: ein Token pro 28x28-Pixel-Patch.
  def count_image_tokens(width, height)
    width.ceildiv(28) * height.ceildiv(28)
  end

  # Die Größe, auf die Claude ein Bild vor dem Padding skaliert, als [width, height].
  #
  # Standardwerte gelten für die Standard-Auflösungsstufe. Für Modelle der
  # High-Resolution-Stufe übergib max_edge: 2576, max_tokens: 4784. Bilder, die
  # bereits in die Limits passen, werden unverändert zurückgegeben.
  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

    # Binärsuche entlang der langen Kante nach der größten seitenverhältnis-
    # treuen Größe. Die kurze Kante rundet .5 auf gerade (round(half: :even)),
    # passend zur Live-API bei exakten .5-Gleichständen.
    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

  # Das A4-Beispiel aus "How Claude resizes and pads images":
  p resized_size(1075, 1520) # => [924, 1307]
  ```
</CodeGroup>

1. Skaliere das Bild auf die vom Resize-Helper zurückgegebenen Abmessungen. Wenn das Bild bereits in die Grenzen des Modells passt, gibt der Helper seine Abmessungen unverändert zurück und es ist keine Skalierung nötig.
2. [Sende das skalierte Bild](https://platform.claude.com/docs/de/build-with-claude/vision#send-images-to-claude) an die API. Fülle es nicht selbst auf. Claude übernimmt das Padding, und Padding verschiebt den Koordinatenursprung nicht.
3. Frage in deinem Prompt ausdrücklich nach Pixelkoordinaten. Zum Beispiel: *„Gib den Klickpunkt für die Schaltfläche Submit als `[x, y]` in Pixelkoordinaten zurück."*
4. Verwende die zurückgegebenen Koordinaten direkt auf dem Bild, das du gesendet hast. Wenn du normalisierte Koordinaten brauchst, teile durch die Abmessungen des gesendeten Bildes, nicht durch die Abmessungen des Originalbildes und nicht durch die aufgefüllten Abmessungen.

<Note>
  Der Endpunkt zur [Token-Zählung](https://platform.claude.com/docs/de/build-with-claude/token-counting) schätzt die Token-Kosten eines Bildes anhand seiner Abmessungen, ohne es vollständig zu verarbeiten. Eine erfolgreiche Zählung bedeutet daher nicht, dass das Bild innerhalb der [Anfragegrenzen](https://platform.claude.com/docs/de/build-with-claude/vision#request-limits) der Messages API liegt. Ein Bild kann erfolgreich gezählt und beim Senden trotzdem abgelehnt werden.
</Note>

## Skalierung mit `transformations` in einen Fehler verwandeln

Die Vorab-Skalierung schützt deine Koordinaten nur, solange deine Pipeline weiterhin die richtigen Größen erzeugt. Eine neue Bildquelle oder der Wechsel zu einem Modell auf einer anderen Auflösungsstufe kann die serverseitige Skalierung unbemerkt wieder einführen. Um diese stille Abweichung in einen sichtbaren Fehler zu verwandeln, setze das optionale Feld `transformations` auf einem Bild-Content-Block in einer [Messages](https://platform.claude.com/docs/de/api/messages)-Anfrage:

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

Eine Anfrage, deren markiertes Bild (jeder Block, der `"oversized_image": "error"` setzt) skaliert werden würde, wird mit einem 400 `invalid_request_error` abgelehnt, der die Abmessungen des Bildes und die größten passenden Abmessungen nennt. Ob ein Bild die Ablehnung auslöst, hängt von den [Grenzen jedes in der Anfrage genannten Modells](https://platform.claude.com/docs/de/build-with-claude/vision-coordinates#how-claude-resizes-and-pads-images) ab: Das 1920×1080-Beispiel unten wird von einem Modell der Standardstufe abgelehnt, passt aber in die hochauflösende Stufe:

```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"
```

Skaliere auf das gemeldete Ziel und sende erneut: Das Ziel ist die größte Größe im Seitenverhältnis deines Bildes, die jedes in der Anfrage genannte Modell akzeptiert. Wie markierte Bilder mit der [Beta für serverseitiges Fallback](https://platform.claude.com/docs/de/build-with-claude/refusals-and-fallback#server-side-fallback) zusammenwirken, ist bei dieser Funktion beschrieben; in jedem Modus wird ein markiertes Bild niemals skaliert ausgeliefert.

Die Einstellung gilt pro Bild. `"oversized_image": "downsize"` (der Standard, wenn das Feld weggelassen wird) behält die automatische Skalierung wie auf dieser Seite beschrieben bei. Jeder Bildblock wird nur gegen seine eigene Einstellung geprüft, sodass eine Anfrage Bilder mischen kann, deren Abmessungen tragend sind (ein Screenshot, auf den du klicken wirst), mit Bildern, bei denen eine Skalierung harmlos ist (ein Logo). Was die Einstellung ändert und was nicht:

* Padding ([das niemals Inhalt verwirft](https://platform.claude.com/docs/de/build-with-claude/vision-coordinates#how-claude-resizes-and-pads-images)), Formatkonvertierung und Ausrichtungskorrektur laufen wie gewohnt ab.
* Die harten Grenzen (8000 px an der längsten Seite und die strengere Grenze pro Bild bei [Anfragen mit vielen Bildern](https://platform.claude.com/docs/de/build-with-claude/vision#request-limits)) sind separate Ablehnungen; diese Einstellung lässt ein Bild niemals an ihnen vorbei.
* Per URL oder Datei-ID bereitgestellte Bilder werden geprüft, sobald ihre Bytes abgerufen wurden; diese Ablehnungen tragen dieselbe Meldung ohne die führende Position, sodass sie nicht angeben, welches Bild fehlgeschlagen ist; nur eingebettete Base64-Bilder werden im Fehler nach Position benannt.
* [PDF-Seiten](https://platform.claude.com/docs/de/build-with-claude/pdf-support) werden serverseitig mit Abmessungen gerastert, die du nicht kontrollierst; der `document`-Block akzeptiert das Feld nicht (ein im Inhalt eines Dokuments verschachtelter Bildblock akzeptiert es wie jeder andere).
* Ein markiertes Bild, dessen Abmessungen nicht ermittelt werden können, wird abgelehnt statt durchgereicht: Diese Ablehnung meldet, dass die Quellabmessungen des Bildes nicht ermittelt werden konnten, nicht die oben zitierte Skalierungsmeldung. Kein Bild, das `"error"` setzt, erreicht das Modell skaliert.

Der Endpunkt für die [Token-Zählung](https://platform.claude.com/docs/de/build-with-claude/token-counting) berücksichtigt `transformations` ebenfalls und lehnt ein eingebettetes Bild genau so ab, wie es die Messages API tun würde. So kannst du vor der Inferenz prüfen, ob ein eingebettetes Bild ohne Skalierung passt. Die Zählung lehnt per URL oder Datei-ID bereitgestellte Bilder ab, anstatt sie abzurufen, sodass ein markiertes Bild aus diesen Quellen erst beim Messages-Aufruf geprüft wird.

## Koordinaten umskalieren, wenn du nicht vorab skalieren kannst

Wenn du nicht vorab skalieren kannst (zum Beispiel, wenn das Bild aus einem vorgelagerten System stammt, das du nicht ändern kannst), verwende den Resize-Helper aus [Skaliere dein Bild vor dem Hochladen](https://platform.claude.com/docs/de/build-with-claude/vision-coordinates#resize-your-image-before-uploading), um die Abmessungen zu ermitteln, die Claude gesehen hat, und bilde dann die von Claude zurückgegebenen Koordinaten auf normalisierte Koordinaten oder zurück auf dein Originalbild ab. Sofern ein Bild nicht [stattdessen einen Fehler wählt](https://platform.claude.com/docs/de/build-with-claude/vision-coordinates#oversized-image-error), skaliert Claude übergroße Bilder, statt sie abzulehnen, bis zu den [Anfragegrenzen](https://platform.claude.com/docs/de/build-with-claude/vision#request-limits) der API. Jenseits dieser Grenzen schlägt die Anfrage stattdessen mit einem Validierungsfehler fehl. Übergib die Stufengrenzen, die zu dem aufgerufenen Modell passen: Die Grenzen der falschen Stufe ermitteln die falschen skalierten Abmessungen und verschieben unbemerkt jede Koordinate. Dieser Ansatz setzt voraus, dass du die Pixelabmessungen des hochgeladenen Bildes kennst, und gilt daher nicht für PDF-Uploads.

Screenshots und Zoom-Bilder, die du an die Toolsets für [Computer Use](https://platform.claude.com/docs/de/agents-and-tools/tool-use/computer-use-tool#handle-coordinate-scaling-for-higher-resolutions) und [Browser Use](https://platform.claude.com/docs/de/agents-and-tools/tool-use/browser-use-tool#targets-and-coordinates) zurückgibst, sind eine Ausnahme von der automatischen Skalierung. Die API lehnt ein `tool_result`-Bild, das die Grenzen des Modells überschreitet, mit einem Validierungsfehler ab, statt es zu skalieren. Skaliere diese Bilder in deiner Anwendung, bevor du sie zurückgibst, und skaliere dann die von Claude zurückgegebenen Koordinaten zurück auf die Abmessungen deines Bildschirms.

<CodeGroup exclude="shell">
  <CodeGroupItem language="cURL">
    Rechne die Koordinaten im Code um.
  </CodeGroupItem>

  <CodeGroupItem language="CLI">
    Rechne die Koordinaten im Code um.
  </CodeGroupItem>

  ```python Python
  # Dieser Helper ruft resized_size aus dem Resize-Beispiel dieser Seite auf.
  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)


  # Eine Tabellenecke, die Claude bei (462, 653.5) auf der skalierten A4-Seite
  # liefert, wird so auf das 1075x1520-Original zurückgerechnet:
  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
  // Diese Hilfsfunktion ruft resizedSize aus dem Resize-Beispiel dieser Seite auf.
  /**
   * 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];
  }

  // Eine Tabellenecke, die Claude bei (462, 653.5) auf der skalierten A4-Seite
  // zurückgibt, wird so auf das 1075x1520-Original zurückgerechnet:
  const [relX, relY] = toRelativeCoordinates(462, 653.5, 1075, 1520);
  console.log([relX * 1075, relY * 1520]); // [ 537.5, 760 ]
  ```

  ```csharp C#
  // Diese Hilfsfunktion ruft ResizedSize aus dem Resize-Beispiel dieser Seite auf.
  // Wandle eine von Claude gelieferte Pixelkoordinate in relative Koordinaten in
  // [0, 1] um. Übergib die Maße des hochgeladenen Bildes und dieselben Tier-
  // Limits wie für 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);
  }

  // Eine Tabellenecke, die Claude bei (462, 653.5) auf der skalierten A4-Seite
  // liefert, wird so auf das 1075x1520-Original zurückgemappt:
  (double relX, double relY) = ToRelativeCoordinates(462, 653.5, 1075, 1520);
  Console.WriteLine((relX * 1075, relY * 1520)); // (537.5, 760)
  ```

  ```go Go
  // Diese Hilfsfunktion ruft resizedSize aus dem Resize-Beispiel dieser Seite auf.

  // toRelativeCoordinates bildet eine von Claude zurückgegebene Pixelkoordinate
  // auf relative Koordinaten in [0, 1] ab. Übergib die Abmessungen des
  // hochgeladenen Bildes und dieselben Stufen-Limits wie für 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)
  }

  // Um zurück in den Pixelraum deines Originalbildes abzubilden, multipliziere mit
  // den Originalabmessungen: eine Tabellenecke bei (462, 653.5) auf der skalierten
  // A4-Seite ist (relX*1075, relY*1520) = (537.5, 760) auf dem 1075x1520-Original.
  ```

  ```java Java
  // Dieser Helfer ruft resizedSize aus dem Resize-Beispiel auf dieser Seite auf.
  /** 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());
  }

  // Um zurück in den Pixelraum deines Originalbilds zu mappen, multipliziere mit den
  // Originalmaßen: eine Tabellenecke bei (462, 653.5) auf der skalierten A4-Seite
  // ist (relative.x() * 1075, relative.y() * 1520) = (537.5, 760) auf dem
  // 1075x1520-Original.
  ```

  ```php PHP
  // Diese Hilfsfunktion ruft resizedSize() aus dem Resize-Beispiel dieser Seite auf.
  /**
   * 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];
  }

  // Eine Tabellenecke, die Claude bei (462, 653.5) auf der skalierten A4-Seite
  // zurückgibt, wird so auf das 1075x1520-Original zurückgerechnet:
  [$relX, $relY] = toRelativeCoordinates(462, 653.5, 1075, 1520);
  echo '(' . $relX * 1075 . ', ' . $relY * 1520 . ")\n"; // (537.5, 760)
  ```

  ```ruby Ruby
  # Diese Hilfsfunktion ruft resized_size aus dem Resize-Beispiel dieser Seite auf.
  # Bilde eine von Claude zurückgegebene Pixelkoordinate auf relative Koordinaten
  # in [0, 1] ab, als [x, y]. Übergib die Maße des hochgeladenen Bildes und
  # dieselben Stufen-Limits wie für 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

  # Eine Tabellenecke, die Claude bei (462, 653.5) auf der skalierten A4-Seite
  # liefert, wird so auf das 1075x1520-Original zurückgerechnet:
  rel_x, rel_y = to_relative_coordinates(462, 653.5, 1075, 1520)
  p [rel_x * 1075, rel_y * 1520] # => [537.5, 760.0]
  ```
</CodeGroup>

Padding wird nur an der unteren und rechten Kante angewendet, sodass sich der Ursprung nicht verschiebt und eine lineare Umskalierung pro Achse ausreicht. Begrenze die zurückgegebenen Koordinaten vor dem Umskalieren auf die skalierten Abmessungen, damit ein Punkt leicht außerhalb des Bildes nicht außerhalb deines Originals abgebildet werden kann.

Die relativen Koordinaten werden mit der Fläche multipliziert, auf der du agierst: dem Originalbild, einem Scan in voller Auflösung oder einem Bildschirm. Wenn du auf einem Bildschirm agierst und sich Screenshot-Pixel von logischen Koordinaten unterscheiden (HiDPI-Displays), teile zusätzlich durch den Skalierungsfaktor des Displays. Die [Skalierungshinweise des Computer-Use-Tools](https://platform.claude.com/docs/de/agents-and-tools/tool-use/computer-use-tool#handle-coordinate-scaling-for-higher-resolutions) behandeln dieses Muster.

## Nächste Schritte

<CardGroup cols={2}>
  <Card title="Agent Skills" icon="stack" href="https://platform.claude.com/docs/de/agents-and-tools/agent-skills/overview">
    Agent Skills sind modulare Fähigkeiten, die Claudes Funktionalität erweitern. Jeder Skill bündelt Anweisungen, Metadaten und optionale Ressourcen (Skripte, Vorlagen), die Claude bei Bedarf automatisch verwendet.
  </Card>

  <Card title="Computer-Use-Tool" icon="computer" href="https://platform.claude.com/docs/de/agents-and-tools/tool-use/computer-use-tool">
    Gib Claude mit dem Computer-Use-Tool Screenshot-, Maus- und Tastatursteuerung über eine Desktop-Umgebung.
  </Card>

  <Card title="PDF-Unterstützung" icon="file" href="https://platform.claude.com/docs/de/build-with-claude/pdf-support">
    Verarbeite PDFs mit Claude. Extrahiere Text, analysiere Diagramme und verstehe visuelle Inhalte aus deinen Dokumenten.
  </Card>

  <Card title="Token-Zählung" icon="calculator" href="https://platform.claude.com/docs/de/build-with-claude/token-counting">
    Zähle die Token in einer Nachricht, bevor du sie an Claude sendest. Nutze Token-Zählungen, um Ratenlimits und Kosten zu verwalten, Entscheidungen zum Modell-Routing zu treffen und Prompts auf eine Ziellänge anzupassen.
  </Card>
</CardGroup>
