我想在画布上绘制一张图片,然后使用CSS来使画布适应特定的大小。结果发现许多浏览器不能很好地缩小画布。OS X下的Firefox似乎是最糟糕的之一,但我没有测试过很多。以下是问题的最小示例:
HTML
<img>
<canvas></canvas>
CSS
img, canvas {
width: 125px;
}
JS
var image = document.getElementsByTagName('img')[0],
canvas = document.getElementsByTagName('canvas')[0];
image.onload = function() {
canvas.width = image.width;
canvas.height = image.height;
var context = canvas.getContext('2d');
context.drawImage(image, 0, 0, canvas.width, canvas.height);
}
image.src = "http://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Helvetica_Neue_typeface_weights.svg/783px-Helvetica_Neue_typeface_weights.svg.png"
在Codepen中运行:http://codepen.io/ford/pen/GgMzJd
这是在Firefox中的结果(从Retina显示器截图):
发生的情况是<img>
和<canvas>
都以相同的大小开始,并由浏览器使用CSS进行缩小(图像宽度为783px)。 显然,浏览器对<img>
执行了一些漂亮的平滑/插值,但没有对<canvas>
执行。
我尝试过:
image-rendering
,但默认设置似乎已经是我想要的。- 像在步骤中缩小图像这样的hacky解决方案,但这没有帮助:http://codepen.io/ford/pen/emGxrd。
Context2D.imageSmoothingEnabled
,但再次,默认值描述了我想要的。
如何使右侧的图像看起来像左侧的图像? 最好尽可能少的代码(例如,我不想自己实现双三次插值)。