【发布时间】:2018-04-23 08:42:52
【问题描述】:
我正在尝试在画布中表示图像,并希望画布为其父容器宽度的某个百分比。问题是我在将图像添加到画布时以某种方式模糊了图像,我不想模糊图像。
我认为添加 ctx.imageSmoothingEnabled = false 会禁用模糊,但它似乎没有帮助。
有谁知道如何防止下面的图像在此画布中模糊?任何想法将不胜感激!
var img = new Image();
img.src = 'https://gist.githubusercontent.com/duhaime/019f2ccb98391adbf460a10463059683/raw/c4c2bc1fa923d905aba0ef88e05c0760823d2cca/000630070000650.jpg';
img.onload = function() {
var canvas = document.querySelector('canvas');
canvas.width = hidden.clientWidth;
canvas.height = hidden.clientHeight;
var ctx = canvas.getContext('2d');
ctx.webkitImageSmoothingEnabled = false;
ctx.mozImageSmoothingEnabled = false;
ctx.imageSmoothingEnabled = false;
ctx.drawImage(hidden,
0, 0, this.naturalWidth, this.naturalHeight,
0, 0, hidden.clientWidth, hidden.clientHeight)
}
#container {
width: 800px;
background: #efefef;
}
#hidden {
position: absolute;
top: -1000%;
}
#hidden,
#canvas {
width: 60%;
}
<div id='container'>
<img src='https://gist.githubusercontent.com/duhaime/019f2ccb98391adbf460a10463059683/raw/c4c2bc1fa923d905aba0ef88e05c0760823d2cca/000630070000650.jpg' id='hidden'>
<canvas></canvas>
</div>
【问题讨论】:
-
如果画布分辨率与显示设备分辨率不匹配,例如画布像素大于显示像素,则会出现伪像。
imageSmoothingEnabled(平滑是双线性过滤)仅适用于画布内容。然后画布独立于其渲染上下文被渲染到页面。您可以使用 CSS 规则image-rendering: pixelated来防止浏览器使用双线性过滤显示画布。 -
@Blindman67 我承认我不知道该怎么评价你的评论。我确实知道图像(#hidden)和画布具有相同的大小,而后者的颗粒感比前者大得多(请参阅下面的 Hugo 帖子)。是否可以在画布内实现图像的细节层次?
标签: javascript html css canvas