【问题标题】:How to set the image quality while converting a canvas with the "toDataURL" method?如何在使用“toDataURL”方法转换画布时设置图像质量?
【发布时间】:2013-01-17 16:24:53
【问题描述】:

我想在将画布元素编码为 jpg 时设置质量因子。

var data = myCanvas.toDataURL( "image/jpeg" );

它没有给我一个高质量的选择。我可以使用其他库吗?

相关:不同浏览器使用的默认质量设置是什么?

【问题讨论】:

    标签: javascript image html5-canvas png jpeg


    【解决方案1】:

    函数的第二个参数是质量。范围从 0.0 到 1.0

    canvas.toDataURL(type,quality);
    

    Here你有扩展信息

    而且我认为一旦转换后就不可能知道图像的质量。正如您在feedle 上看到的那样,在控制台上打印值时获得的唯一信息是类型和图像代码本身。

    这是我为了解浏览器使用的质量的默认值而编写的一段代码。

        var c=document.getElementById("myCanvas");
        var ctx=c.getContext("2d");
        ctx.fillStyle="#FF0000";
        ctx.fillRect(0,0,150,75);
    
        var url = c.toDataURL('image/jpeg');
        var v = 0
        for(var i = 0; i < 100; i++ ){
    
            v += 0.01;
            x = parseFloat((v).toFixed(2))
            var test = c.toDataURL('image/jpeg', x);
    
            if(test == url){
                console.log('The default value is: ' + x);
            }
        }
    

    基本上我认为图像本身的变化会反映在base64字符串上。所以代码只是在toDataURL() 方法上尝试所有可能的值,并将结果字符串与默认字符串进行比较。它似乎有效。对于铬,我得到 0.92。

    Here 是小提琴上的工作示例。

    【讨论】:

    • firefox的默认值也是0.92
    • Chrome 32 上也是 0.92。
    【解决方案2】:

    使用Fabric.js,一种非常简单易读的方式,是这样的:

    canvas.toDataURL({
       format: 'jpeg',
       quality: 0.8
    });
    

    这还允许您有其他选项,让您能够裁剪图像等:

    canvas.toDataURL({
        format: 'png',
        left: 300,
        top: 250,
        width: 200,
        height: 150
    })
    

    jsFiddle:http://jsfiddle.net/7f9bqs00/30/

    【讨论】:

    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 2020-04-10
    • 2011-08-07
    • 1970-01-01
    • 2012-10-08
    • 2014-04-12
    相关资源
    最近更新 更多