As TIFF is not generally supported as target file-format in the browser, you will have to manually encode the TIFF file by building up the file-structure using typed arrays and in accordance with the file specifications (see Photoshop notes here). It's doable:
- Get the raw RGBA bitmap from canvas (remember that CORS matters)
- Use typed arrays with DataView view to be able to write various data at unaligned positions
- Build up file header, define minimum set of TAGS and encode the RGBA data in the way you need (uncompressed is simple to implement, or a simple RLE compression).
- Construct the final file buffer. From here you have an ArrayBuffer you can transfer as bytes, optionally:
- Convert to Blob with ArrayBuffer and tiff mime-type.
- Convert to Data-URI using ArrayBuffer as basis
Update canvas-to-tiff can be used to save canvas as TIFF images (disclaimer: I'm the author).
To get an Data-URI using canvas-to-tiff you can simply do:
CanvasToTIFF.toDataURL(canvasElement, function(url) {
// url now contains the data-uri.
window.location = url; // download, does not work in IE; just to demo
});
Although, I would recommend using toBlob(), or if you want to give the user a link, toObjectURL() (instead of toDataURL).
Demo using 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>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…