【发布时间】:2013-01-17 16:24:53
【问题描述】:
我想在将画布元素编码为 jpg 时设置质量因子。
var data = myCanvas.toDataURL( "image/jpeg" );
它没有给我一个高质量的选择。我可以使用其他库吗?
相关:不同浏览器使用的默认质量设置是什么?
【问题讨论】:
标签: javascript image html5-canvas png jpeg
我想在将画布元素编码为 jpg 时设置质量因子。
var data = myCanvas.toDataURL( "image/jpeg" );
它没有给我一个高质量的选择。我可以使用其他库吗?
相关:不同浏览器使用的默认质量设置是什么?
【问题讨论】:
标签: javascript image html5-canvas png jpeg
函数的第二个参数是质量。范围从 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 是小提琴上的工作示例。
【讨论】:
使用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/
【讨论】: