【问题标题】:Save fabricjs canvas as image on the pc将fabricjs画布保存为PC上的图像
【发布时间】:2016-02-21 18:09:50
【问题描述】:

我想通过单击我的 html 页面中的按钮将 Fabric 画布保存为 PC 上的图像(jpg 或 png 相同)。我尝试了一个解决方案,但不起作用:

function saveF(canvF) {
var imageCanv = canvF.toDataURL('png');
var myBlob = new Blob(['imageCanv'], { type: "image/png" });
var reader = new FileReader();
reader.onload = function (event) {
    var URL = canvF.toDataURL('png');
    document.getElementById("lnkDownload").href = URL;
};

reader.readAsDataURL(myBlob);}

这是html标签:

<a class="icon fb" href="" id="lnkDownload" download="canvas.png" style="float:left; background-color:red"><i class="fa fa-save"></i></a>

我创建了其他解决方案,但它们不起作用

【问题讨论】:

    标签: javascript html image canvas fabricjs


    【解决方案1】:

    这是我的解决方案,下载 blob(有点像 hack),您可以生成文本文件,或者其他更复杂的文件。

    function saveImage(e) {
        this.href = canvas.toDataURL({
            format: 'jpeg',
            quality: 0.8
        });
        this.download = 'canvas.png'
    }
    

    var canvas = new fabric.Canvas('imageCanvas', {
        backgroundColor: 'rgb(240,240,240)'
    });
    canvas.setWidth(300);
    canvas.setHeight(300);
    
    
    
    var imageLoader = document.getElementById('imageLoader');
    imageLoader.addEventListener('change', handleImage, false);
    
    function handleImage(e) {
        var objects = canvas.getObjects();
        for (var i in objects) {
           objects[i].remove();
        }
        var reader = new FileReader();
        reader.onload = function (event) {
            var img = new Image();
            img.onload = function () {
                var imgInstance = new fabric.Image(img, {
                   selectable: 1
                })
                canvas.add(imgInstance);
                canvas.deactivateAll().renderAll();
            }
            img.src = event.target.result;
        }
        reader.readAsDataURL(e.target.files[0]);
    }
    
    
    
    var imageSaver = document.getElementById('lnkDownload');
    imageSaver.addEventListener('click', saveImage, false);
    
    function saveImage(e) {
        this.href = canvas.toDataURL({
            format: 'png',
            quality: 0.8
        });
        this.download = 'canvas.png'
    }
    div#container {
        padding: 30px;
        font-family: 'verdana', lucida;
    }
    input {
        background-color: #ccc;
        padding: 0;
        width: 300px;
        color: #777;
    }
    a{
        color: #777;
        display: block;
        background-color: #ccc; 
        width: 300px;
        padding: 0;
        margin-top: 2px;
        text-decoration:none;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.5.0/fabric.min.js"></script>
    
    <div id="container">
        <input type="file" id="imageLoader" name="imageLoader" />
        <canvas id="imageCanvas" width="300" height="300"></canvas> 
        <a id="lnkDownload" href="#">Save image</a>
    </div>

    【讨论】:

    • 我尝试了保存功能,它可以工作,只是一个问题:图像背景是黑色的,为什么?我的画布容器覆盖了整个身体(即白色),因此画布和织物画布
    • 又是什么黑色的?在我的例子中你的情况?
    • 我只是使用你的 js 函数将画布作为图像保存在我的 js 文件中,但使用的是我的 html 和 css。它有效,在 canvas.png 中我看到了我绘制的所有图形,但背景是黑色的。也许我必须设置 canvas.backgroundcolor 属性?
    • 编辑:这是一个 windows foto 问题叹息,用油漆我可以正确看到图像。再次感谢
    • 请注意quality 参数仅适用于'jpeg' 格式
    猜你喜欢
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2021-06-13
    • 2014-06-17
    相关资源
    最近更新 更多