Spec-Zone.ru › Web APIs

HTMLCanvasElement: метод toBlob()

Базовая Широко поддерживается

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Метод HTMLCanvasElement.toBlob() создаёт объект Blob, представляющий изображение, содержащееся в холсте. Этот файл может быть кэширован на диске или сохранён в памяти по усмотрению пользователя агента.

Можно указать желаемый формат файла и качество изображения. Если формат файла не указан или заданный формат не поддерживается, данные будут экспортированы как image/png. Браузеры обязаны поддерживать image/png; многие будут поддерживать дополнительные форматы, включая image/jpeg и image/webp.

Созданное изображение будет иметь разрешение 96 dpi для форматов файлов, которые поддерживают метаданные разрешения кодирования.

Синтаксис

toBlob(callback)
toBlob(callback, type)
toBlob(callback, type, quality)

Параметры

callback

Функция обратного вызова с полученным объектом Blob в качестве единственного аргумента. null может быть передана, если изображение не может быть создано по какой-либо причине.

type Необязательно

Строка, указывающая формат изображения. По умолчанию тип image/png; этот тип также используется, если указанный тип не поддерживается.

quality Необязательно

Number от 0 до 1, указывающий качество изображения, используемое при создании изображений с использованием форматов файлов, поддерживающих сжатие с потерями (например, image/jpeg или image/webp). Пользовательский агент использует значение по умолчанию, если этот параметр не указан или число находится вне допустимого диапазона.

Возвращаемое значение

Ничего (undefined).

Исключения

SecurityError

Растровое изображение холста не является чистого происхождения; по крайней мере, часть его содержимого была загружена с другого сайта, кроме того, с которого был загружен сам документ.

Примеры

Получение файла, представляющего холст

После отрисовки содержимого в холст, его можно преобразовать в файл любого поддерживаемого формата изображения. Например, фрагмент кода ниже берёт изображение в элементе <canvas> с идентификатором «canvas», получает его копию в формате PNG, а затем добавляет новый элемент <img> в документ, чьим источником изображения является созданный с помощью холста.

const canvas = document.getElementById("canvas");

canvas.toBlob((blob) => {
  const newImg = document.createElement("img");
  const url = URL.createObjectURL(blob);

  newImg.onload = () => {
    // no longer need to read the blob so it's revoked
    URL.revokeObjectURL(url);
  };

  newImg.src = url;
  document.body.appendChild(newImg);
});

Обратите внимание, что здесь мы создаём изображение PNG; если вы добавите второй параметр к вызову toBlob(), вы сможете указать другой тип изображения, поддерживаемый пользовательским агентом. Например, чтобы получить изображение в формате JPEG:

canvas.toBlob(
  (blob) => {
    /* … */
  },
  "image/jpeg",
  0.95,
); // JPEG at 95% quality

Преобразование холста в ico (только Mozilla)

Это использует -moz-parse для преобразования холста в ico и, следовательно, работает только в Firefox. Windows XP не поддерживает преобразование из PNG в ico, поэтому используется bmp вместо этого. Ссылка для скачивания создаётся установкой атрибута download. Значение атрибута download — имя, которое будет использоваться в качестве имени файла.

const canvas = document.getElementById("canvas");
const d = canvas.width;
const ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(d / 2, 0);
ctx.lineTo(d, d);
ctx.lineTo(0, d);
ctx.closePath();
ctx.fillStyle = "yellow";
ctx.fill();

function blobCallback(iconName) {
  return (b) => {
    const a = document.createElement("a");
    a.textContent = "Download";
    document.body.appendChild(a);
    a.style.display = "block";
    a.download = `${iconName}.ico`;
    a.href = window.URL.createObjectURL(b);
  };
}
canvas.toBlob(
  blobCallback("passThisString"),
  "image/vnd.microsoft.icon",
  "-moz-parse-options:format=bmp;bpp=32",
);

Сохранение toBlob на диск с помощью OS.File (только Chrome/контекст дополнения)

Примечание: Этот метод сохраняет файл на рабочий стол и полезен только в контексте Firefox chrome или коде дополнения, так как API операционной системы отсутствуют на веб-сайтах.

const canvas = document.getElementById("canvas");
const d = canvas.width;
ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(d / 2, 0);
ctx.lineTo(d, d);
ctx.lineTo(0, d);
ctx.closePath();
ctx.fillStyle = "yellow";
ctx.fill();

function blobCallback(iconName) {
  return (b) => {
    const r = new FileReader();
    r.onloadend = () => {
      // r.result contains the ArrayBuffer.
      Cu.import("resource://gre/modules/osfile.jsm");
      const writePath = OS.Path.join(
        OS.Constants.Path.desktopDir,
        `${iconName}.ico`,
      );
      const promise = OS.File.writeAtomic(writePath, new Uint8Array(r.result), {
        tmpPath: `${writePath}.tmp`,
      });
      promise.then(
        () => {
          console.log("successfully wrote file");
        },
        () => {
          console.log("failure writing file");
        },
      );
    };
    r.readAsArrayBuffer(b);
  };
}

canvas.toBlob(
  blobCallback("passThisString"),
  "image/vnd.microsoft.icon",
  "-moz-parse-options:format=bmp;bpp=32",
);

Спецификации

Спецификация
HTML
# dom-canvas-toblob-dev

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
toBlob 50 7912–79 18 37 11 50 18 37 11 5.0 50
quality_parameter 50 79 25 37 11 50 25 37 11 5.0 50
type_parameter_jpeg 50 79 18 37 11 50 18 37 11 5.0 50
type_parameter_png 50 79 18 37 11 50 18 37 11 5.0 50
type_parameter_webp 50 79 96 37 Нет 50 96 37 Нет 5.0 50

См. также

  • Blob

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API