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 |
См. также
© 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