---
title: Координаты и ограничивающие рамки
url: https://platform.claude.com/docs/ru/build-with-claude/vision-coordinates
description: Как Claude изменяет размер изображений и как работать с пиксельными координатами, которые он возвращает для ограничивающих рамок, точек и элементов интерфейса.
---

Claude может находить и помечать области изображения (например, возвращать ограничивающие рамки для таблиц, полей форм, элементов диаграмм или компонентов интерфейса). В этом руководстве описано, как Claude изменяет размер изображений перед их обработкой и как работать с пиксельными координатами, которые он возвращает, чтобы рамки и точки совпадали с вашим исходным изображением.

Это понадобится вам для конвейеров OCR, извлечения данных из форм, разбора диаграмм, определения положения элементов интерфейса и любой задачи, в которой вы выполняете действия над конкретной областью изображения. Об отправке изображений, поддерживаемых форматах и ограничениях разрешения для каждой модели см. раздел [Зрение](https://platform.claude.com/docs/ru/build-with-claude/vision).

<Note>
  **Claude лучше всего работает с абсолютными пиксельными координатами.** Явно запрашивайте их в своей подсказке. Например: *«Верни ограничивающую рамку каждой таблицы в виде `[x1, y1, x2, y2]` (верхний левый и нижний правый углы) в пиксельных координатах».* Claude плохо справляется, когда вы запрашиваете нормализованные координаты, например: *«Верни координаты ограничивающей рамки в диапазоне от `0` до `1000`».* Всегда запрашивайте пиксельные координаты и при необходимости нормализуйте их в своём коде. Чтобы получать координаты в виде машиночитаемого JSON, а не текста, определите схему с помощью [структурированных выводов](https://platform.claude.com/docs/ru/build-with-claude/structured-outputs), например объект с массивом `[x1, y1, x2, y2]` для каждого обнаруженного элемента.
</Note>

Координаты следуют стандартному соглашению для изображений: начало координат `(0, 0)` находится в верхнем левом углу изображения, x увеличивается вправо, а y — вниз. Координаты, которые возвращает Claude, — это позиции пикселей в изображении, которое обрабатывает Claude: в вашем изображении после того, как Claude изменил его размер под нативное разрешение модели (см. [Как Claude изменяет размер и дополняет изображения](https://platform.claude.com/docs/ru/build-with-claude/vision-coordinates#how-claude-resizes-and-pads-images)). Чтобы получить координаты, которые можно использовать напрямую, либо заранее измените размер изображения, чтобы координаты один к одному соответствовали имеющемуся у вас изображению (см. [Изменение размера изображения перед загрузкой](https://platform.claude.com/docs/ru/build-with-claude/vision-coordinates#resize-your-image-before-uploading)), либо масштабируйте координаты, которые возвращает Claude (см. [Масштабирование координат, когда нельзя заранее изменить размер](https://platform.claude.com/docs/ru/build-with-claude/vision-coordinates#rescale-coordinates-when-you-cannot-pre-resize)).

<Note>
  Пространственное мышление Claude имеет ограничения (см. [Ограничения](https://platform.claude.com/docs/ru/build-with-claude/vision#limitations)). Точность координат наилучшая, когда вы указываете ожидаемый формат координат в подсказке и визуально проверяете результаты выборочно перед масштабной обработкой. Мелкие элементы теряют точность при уменьшении изображения: для мелких целей обрежьте интересующую область и отправьте фрагмент (сместив возвращённые координаты на начало координат фрагмента) либо используйте модель уровня высокого разрешения. При [поддержке PDF](https://platform.claude.com/docs/ru/build-with-claude/pdf-support) страницы растеризуются в изображения на стороне сервера с размерами, которые вы не контролируете, поэтому возвращённые координаты нельзя надёжно сопоставить со страницей. Чтобы работать с координатами в содержимом PDF, растеризуйте страницы в изображения самостоятельно и используйте подход с предварительным изменением размера.
</Note>

## Как Claude изменяет размер изображений и добавляет отступы

Claude находит наибольший размер с сохранением пропорций, удовлетворяющий обоим ограничениям модели для изображений:

1. **Ограничение по стороне:** ни одна сторона не превышает максимальную длину стороны (1 568 px на стандартном уровне, 2 576 px на уровне высокого разрешения).
2. **Ограничение визуальных токенов:** стоимость изображения в токенах `⌈width / 28⌉ × ⌈height / 28⌉` не превышает бюджет визуальных токенов модели (1 568 токенов на стандартном уровне, 4 784 на уровне высокого разрешения).

О том, какие модели относятся к какому уровню, см. [Разрешение и стоимость в токенах](https://platform.claude.com/docs/ru/build-with-claude/vision#evaluate-image-size).

Почти для всех фотографий и снимков экрана итоговый размер определяется ограничением по визуальным токенам. Ограничение по стороне вступает в силу только для вытянутых изображений, таких как панорамы или высокие снимки экрана телефона. Вычисляйте размер с помощью [эталонной реализации](https://platform.claude.com/docs/ru/build-with-claude/vision-coordinates#resize-your-image-before-uploading), а не масштабируйте вручную до длины стороны: снимок экрана 1920×1080 уменьшается до 1456×819, а не до 1568×882, и если исходить из ограничения по стороне, каждая координата окажется заметно смещённой от цели.

Ограничение токенов также может вызвать изменение размера, даже когда ни одна сторона не превышает ограничение по стороне. Упущение этого — самая частая причина смещённых координат. Например, страница A4, отсканированная с разрешением 130 DPI, имеет размер 1075×1520 пикселей: обе стороны меньше 1 568 px, но она стоит `39 × 55 = 2145` визуальных токенов, поэтому Claude уменьшает её до 924×1307.

<Note>
  В этом примере предполагается модель стандартного уровня разрешения. Модель уровня высокого разрешения не изменяет размер того же скана: 2 145 токенов укладываются в её бюджет 4 784 токена, поэтому возвращаемые ею координаты напрямую соответствуют оригиналу 1075×1520. Уровни моделей перечислены в разделе [Разрешение и стоимость в токенах](https://platform.claude.com/docs/ru/build-with-claude/vision#evaluate-image-size).
</Note>

Затем Claude дополняет каждое изображение, изменённое или нет, отступами до следующего кратного 28 пикселям по нижнему и правому краям (в примере 924×1307 становится 924×1316). Отступы не содержат никакого содержимого: Claude воспринимает дополненное изображение, но содержимое страницы всегда занимает только изменённую область без отступов. **Всегда нормализуйте или пересчитывайте по размерам после изменения размера, а не по размерам с отступами**; деление на размеры с отступами слегка масштабирует каждую координату.

## Измените размер изображения перед загрузкой

Самый надёжный подход — самостоятельно изменить размер изображения перед загрузкой, чтобы имеющееся у вас изображение в точности совпадало с изображением, которое обрабатывает Claude, и возвращаемые Claude координаты не требовали преобразования.

Сначала проверьте, к какому уровню разрешения относится ваша модель (см. [Разрешение и стоимость в токенах](https://platform.claude.com/docs/ru/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 for each 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))


  # Пример A4 из раздела «Как Claude изменяет размер и дополняет изображения»:
  print(resized_size(1075, 1520))  # (924, 1307)

  # Для изменения размера используйте вашу библиотеку изображений, например Pillow:
  # image.resize(resized_size(*image.size))
  ```

  ```typescript TypeScript
  /** Visual tokens consumed by an image: one token for each 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)];
  }

  // Пример A4 из раздела «Как Claude изменяет размер и дополняет изображения»:
  console.log(resizedSize(1075, 1520)); // [ 924, 1307 ]

  // Для изменения размера используйте вашу библиотеку изображений, например sharp:
  // await sharp(input).resize(width, height).toBuffer()
  ```

  ```csharp C#
  // Визуальные токены, потребляемые изображением: один токен на каждый фрагмент 28x28 пикселей.
  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);
      }

      // Бинарный поиск по длинной стороне для наибольшего размера с сохранением пропорций,
      // который помещается. Короткая сторона округляет половины к чётному, как и живой
      // API при точных значениях .5 (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);
  }

  // Пример с A4 из раздела «Как Claude изменяет размер и дополняет изображения»:
  Console.WriteLine(ResizedSize(1075, 1520)); // (924, 1307)
  ```

  ```go Go
  // countImageTokens — число визуальных токенов, потребляемых изображением: один токен на каждый
  // фрагмент 28x28 пикселей.
  func countImageTokens(width, height int) int {
  	return ((width + 27) / 28) * ((height + 27) / 28) // ceil(w/28) * ceil(h/28)
  }

  // resizedSize — размер, до которого Claude изменяет изображение перед дополнением, в виде
  // (ширина, высота). Передайте maxEdge 1568 и maxTokens 1568 для стандартного
  // уровня разрешения или 2576 и 4784 для уровня высокого разрешения. Изображения,
  // которые уже укладываются в лимиты, возвращаются без изменений.
  // Пример A4 из «Как Claude изменяет размер и дополняет изображения»:
  // 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),
  	// совпадая с живым API при значениях ровно .5; 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 for each 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),
      // совпадая с живым API при ровно .5; 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 пикселей.
  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), что совпадает с живым API при значениях ровно x.5.
      $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)];
  }

  // Пример с A4 из раздела «Как Claude изменяет размер и дополняет изображения»:
  [$resizedWidth, $resizedHeight] = resizedSize(1075, 1520);
  echo "({$resizedWidth}, {$resizedHeight})\n"; // (924, 1307)
  ```

  ```ruby Ruby
  # Визуальные токены, потребляемые изображением: один токен на каждый патч 28x28 пикселей.
  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)),
    # что совпадает с поведением живого API при значениях ровно .5.
    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

  # Пример с A4 из раздела «Как Claude изменяет размер изображений и добавляет отступы»:
  p resized_size(1075, 1520) # => [924, 1307]
  ```
</CodeGroup>

1. Измените размер изображения до размеров, возвращённых вспомогательной функцией изменения размера. Если изображение уже укладывается в ограничения модели, функция возвращает его размеры без изменений, и изменение размера не требуется.
2. [Отправьте изменённое изображение](https://platform.claude.com/docs/ru/build-with-claude/vision#send-images-to-claude) в API. Не добавляйте отступы самостоятельно. Claude сам добавляет отступы, и они не смещают начало координат.
3. В подсказке явно запросите пиксельные координаты. Например: *«Верни точку нажатия для кнопки Submit в виде `[x, y]` в пиксельных координатах.»*
4. Используйте возвращённые координаты напрямую с отправленным изображением. Если вам нужны нормализованные координаты, делите на размеры отправленного изображения, а не на размеры исходного изображения и не на размеры с отступами.

<Note>
  Конечная точка [подсчёта токенов](https://platform.claude.com/docs/ru/build-with-claude/token-counting) оценивает стоимость изображения в токенах по его размерам, не обрабатывая его полностью, поэтому успешный подсчёт не означает, что изображение укладывается в [ограничения запросов](https://platform.claude.com/docs/ru/build-with-claude/vision#request-limits) Messages API. Изображение может быть успешно подсчитано и всё же отклонено при отправке.
</Note>

## Превратите изменение размера в ошибку с помощью `transformations`

Предварительное изменение размера защищает ваши координаты лишь до тех пор, пока ваш конвейер продолжает выдавать правильные размеры. Новый источник изображений или переход на модель другого уровня разрешения могут незаметно вернуть изменение размера на стороне сервера. Чтобы превратить это незаметное расхождение в видимую ошибку, задайте необязательное поле `transformations` в блоке содержимого изображения в запросе [Messages](https://platform.claude.com/docs/ru/api/messages):

```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/ru/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/ru/build-with-claude/refusals-and-fallback#server-side-fallback), описано вместе с этой функцией; в любом режиме помеченное изображение никогда не передаётся в изменённом размере.

У каждого изображения своя настройка. `"oversized_image": "downsize"` (значение по умолчанию, когда поле опущено) сохраняет автоматическое изменение размера, описанное на этой странице. Каждый блок изображения проверяется только по его собственной настройке, поэтому в одном запросе можно сочетать изображения, размеры которых важны (снимок экрана, на котором вы будете нажимать), с изображениями, для которых изменение размера безвредно (логотип). Что настройка меняет и чего не меняет:

* [Дополнение](https://platform.claude.com/docs/ru/build-with-claude/vision-coordinates#how-claude-resizes-and-pads-images) (которое никогда не отбрасывает содержимое), преобразование формата и коррекция ориентации выполняются как обычно.
* Жёсткие ограничения (8 000 px по самой длинной стороне и более строгое ограничение на изображение в [запросах с множеством изображений](https://platform.claude.com/docs/ru/build-with-claude/vision#request-limits)) являются отдельными причинами отклонения; эта настройка никогда не позволяет изображению их обойти.
* Изображения, переданные по URL или идентификатору файла, проверяются после получения их байтов; такие отклонения содержат то же сообщение без указания позиции в начале, поэтому они не указывают, какое изображение не прошло проверку; только встроенные изображения base64 называются в ошибке по позиции.
* [Страницы PDF](https://platform.claude.com/docs/ru/build-with-claude/pdf-support) растеризуются на стороне сервера с размерами, которые вы не контролируете; блок `document` не принимает это поле (блок изображения, вложенный в содержимое документа, принимает его, как и любой другой).
* Помеченное изображение, размеры которого невозможно определить, отклоняется, а не пропускается: такое отклонение сообщает, что исходные размеры изображения не удалось определить, а не приведённое ранее сообщение об изменении размера. Ни одно изображение, задающее `"error"`, не попадает к модели с изменённым размером.

Эндпоинт [Подсчёт токенов](https://platform.claude.com/docs/ru/build-with-claude/token-counting) также учитывает `transformations`, отклоняя встроенное изображение точно так же, как это сделал бы Messages API, поэтому вы можете проверить, помещается ли встроенное изображение без изменения размера, ещё до запуска инференса. При подсчёте изображения, переданные по URL или идентификатору файла, отклоняются, а не загружаются, поэтому помеченное изображение из таких источников проверяется только при вызове Messages.

## Пересчёт координат, когда предварительное изменение размера невозможно

Если вы не можете заранее изменить размер (например, когда изображение поступает из вышестоящей системы, которую вы не можете изменить), используйте вспомогательную функцию изменения размера из раздела [Изменение размера изображения перед загрузкой](https://platform.claude.com/docs/ru/build-with-claude/vision-coordinates#resize-your-image-before-uploading), чтобы восстановить размеры изображения, обработанного Claude, а затем преобразуйте координаты, которые возвращает Claude, в нормализованные координаты или обратно в координаты исходного изображения. Если для изображения не включена [ошибка для слишком больших изображений](https://platform.claude.com/docs/ru/build-with-claude/vision-coordinates#oversized-image-error), Claude изменяет размер слишком больших изображений, а не отклоняет их, в пределах [ограничений запросов](https://platform.claude.com/docs/ru/build-with-claude/vision#request-limits) API. За пределами этих ограничений запрос завершается ошибкой валидации. Передавайте ограничения уровня, соответствующего вызванной модели: ограничения неверного уровня восстановят неверные размеры после изменения и незаметно сместят каждую координату. Этот подход требует знания пиксельных размеров загруженного изображения, поэтому он не применим к загрузке PDF.

Снимки экрана и увеличенные изображения, которые вы возвращаете наборам инструментов [использования компьютера](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/computer-use-tool#handle-coordinate-scaling-for-higher-resolutions) и [использования браузера](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/browser-use-tool#targets-and-coordinates), являются исключением из автоматического изменения размера. API отклоняет изображение `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)


  # Угол таблицы, который Claude возвращает в (462, 653.5) на уменьшенной странице A4,
  # отображается обратно на оригинал 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];
  }

  // Угол таблицы, который Claude возвращает в (462, 653.5) на уменьшенной странице A4,
  // отображается обратно на оригинал 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);
  }

  // Угол таблицы, который Claude возвращает в точке (462, 653.5) на уменьшенной странице A4,
  // отображается обратно на оригинал 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)
  }

  // Чтобы вернуться в пиксельное пространство исходного изображения, умножьте на исходные
  // размеры: угол таблицы, возвращённый в (462, 653.5) на изменённой странице A4,
  // равен (relX*1075, relY*1520) = (537.5, 760) на оригинале 1075x1520.
  ```

  ```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());
  }

  // Чтобы вернуться в пиксельное пространство исходного изображения, умножьте на исходные
  // размеры: угол таблицы, возвращённый в (462, 653.5) на изменённой странице A4,
  // равен (relative.x() * 1075, relative.y() * 1520) = (537.5, 760) на
  // оригинале 1075x1520.
  ```

  ```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];
  }

  // Угол таблицы, который Claude возвращает в (462, 653.5) на уменьшенной странице A4,
  // отображается обратно на оригинал 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

  # Угол таблицы, который Claude возвращает как (462, 653.5) на уменьшенной странице A4,
  # отображается обратно на оригинал 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/ru/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/ru/agents-and-tools/agent-skills/overview">
    Agent Skills — это модульные возможности, расширяющие функциональность Claude. Каждый Skill объединяет инструкции, метаданные и необязательные ресурсы (скрипты, шаблоны), которые Claude автоматически использует, когда это уместно.
  </Card>

  <Card title="Инструмент использования компьютера" icon="computer" href="https://platform.claude.com/docs/ru/agents-and-tools/tool-use/computer-use-tool">
    Предоставьте Claude управление снимками экрана, мышью и клавиатурой в среде рабочего стола с помощью инструмента использования компьютера.
  </Card>

  <Card title="Поддержка PDF" icon="file" href="https://platform.claude.com/docs/ru/build-with-claude/pdf-support">
    Обрабатывайте PDF с помощью Claude. Извлекайте текст, анализируйте диаграммы и понимайте визуальное содержимое ваших документов.
  </Card>

  <Card title="Подсчёт токенов" icon="calculator" href="https://platform.claude.com/docs/ru/build-with-claude/token-counting">
    Подсчитывайте токены в сообщении перед его отправкой Claude. Используйте количество токенов для управления ограничениями скорости и затратами, принятия решений о маршрутизации моделей и подгонки подсказок под целевую длину.
  </Card>
</CardGroup>
