Как TIFF обычно не поддерживается в качестве целевого файла формата в браузере, вам придется вручную кодировать файл TIFF путем создания файла-структуры с использованием типизированных массивов и в соответствии с file specifications (см Photoshop notes здесь). Это doable:
- Получить сырой RGBA растрового изображения из холста (помните, что вопросы CORS)
- Использование типизированным массивам с точки зрения DataView, чтобы иметь возможность записывать различные данные по выровненным позициям
- Создайте заголовок файла, определить минимальный набор TAGS и кодирование данных RGBA так, как вам нужно (несжатый просто реализовать или простое сжатие RLE).
- Построить окончательный буфер файлов. Отсюда у вас есть ArrayBuffer, который вы можете передать в виде байтов, необязательно:
- Преобразование в Blob с ArrayBuffer и tiff mime-type.
- Преобразовать в Data-URI, используя в качестве основы ArrayBuffer
Updatecanvas-to-tiff может быть использован для сохранения холста, как TIFF изображений (оговорка: Я автор).
Чтобы получить Data-URI, используя холст-к-размолвки вы можете просто сделать:
CanvasToTIFF.toDataURL(canvasElement, function(url) {
// url now contains the data-uri.
window.location = url; // download, does not work in IE; just to demo
});
Хотя, я бы рекомендовал использовать toBlob(), или если вы хотите, чтобы дать пользователю ссылку, toObjectURL() (вместо toDataURL).
Демонстрация с помощью Data-URI
var c = document.querySelector("canvas"),
ctx = c.getContext("2d");
// draw some graphics
ctx.strokeStyle = "rgb(0, 135, 222)";
ctx.lineWidth = 30;
ctx.arc(200, 200, 170, 0, 2*Math.PI);
ctx.stroke();
// Covert to TIFF using Data-URI (slower, larger size)
CanvasToTIFF.toDataURL(c, function(url) {
var a = document.querySelector("a");
a.href = url;
a.innerHTML = "Right-click this link, select Save As to save the TIFF";
})
<script src="https://cdn.rawgit.com/epistemex/canvas-to-tiff/master/canvastotiff.min.js">
</script>
<a href=""></a><br>
<canvas width=400 height=400></canvas>
Demo с использованием объектно-ориентированного URL-адрес
var c = document.querySelector("canvas"),
ctx = c.getContext("2d");
// draw some graphics
ctx.strokeStyle = "rgb(0, 135, 222)";
ctx.lineWidth = 30;
ctx.arc(200, 200, 170, 0, 2*Math.PI);
ctx.stroke();
// Covert to TIFF using Object-URL (faster, smaller size)
CanvasToTIFF.toObjectURL(c, function(url) {
var a = document.querySelector("a");
a.href = url;
a.innerHTML = "Right-click this link, select Save As to save the TIFF";
})
<script src="https://cdn.rawgit.com/epistemex/canvas-to-tiff/master/canvastotiff.min.js">
</script>
<a href=""></a><br>
<canvas width=400 height=400></canvas>
Привет. Прежде всего, спасибо большое! Кажется, это то, что я ищу. Во-вторых, я пытаюсь использовать вашу библиотеку, но я не смог. Не могли бы вы объяснить, как получить строку base64 после вызова CanvasToTIFF.toDataURL? Не используется ли изображение с холста? если да, то в чем причина ури? Еще раз спасибо и приносим извинения, если мои вопросы глупы, я просто хочу понять, как это работает – MrCujo
@johansebasb, если вы хотите сохранить холст в формате TIFF, вам нужен формат для распространения полученного файла int. URI данных удобны, поскольку они могут переноситься как чистые строки без риска ошибок кодирования (char). Я бы рекомендовал использовать toBlob, если это возможно, поскольку это чистый байтовый буфер, который быстрее и эффективнее.Передайте данные-uri или blob-url в качестве источника для ссылки и т. Д., Чтобы пользователь мог загрузить или загрузить на сервер. См. Вкл. демо, как использовать их (это также показано в файле readme - вам нужно использовать обратные вызовы). – K3N
@johansebasb добавлена демонстрация о том, как ее использовать – K3N