javascript - Canvas 中的最近邻渲染

标签 javascript html canvas sprite nearest-neighbor

我有一个使用 Sprite 表制作动画的 Sprite 。他只有 16x16,但我想把他放大到 64x64 左右,因为它的所有像素 y 优点!

alt text

结果很糟糕,当然浏览器是抗锯齿的。 :/

谢谢!

编辑: 不需要 css,这是我的绘制函数。

function drawSprite(offsetx:number,offsety:number,posx:number,posy:number){
    ctx.drawImage(img, offsetx*32, offsety*32, 32, 16, posx*32, posy*8, 128, 32);
}

看到它有点工作 here (codepen)

最佳答案

万一有人再次遇到这个问题(比如我),Webkit 支持 -webkit-optimize-contrast 值用于 image-rendering,(目前)是最近邻居放大的实现。它可以应用于图像和 Canvas 。

这是一个如何进行的示例。

.nn128 {
    width: 128px;
    height: 128px;
    image-rendering: -moz-crisp-edges;
    image-rendering: -webkit-optimize-contrast;
}

<canvas class="nn128" width="16" height="16"></canvas>
<img src="path/to/small/image.png" alt="Small image" class="nn128">

使用此设置,WebkitSafari 和 Gecko/Firefox 都会使用最近邻算法将 16x16 Canvas 空间和小图像放大到 128x128。

更新 最初的回答是 Webkit 浏览器支持这个;事实上,截至 2011 年 12 月 24 日,它适用于 Mac OS 上的 Safari 和 Mac OS 上的 Chrome,但不适用于 Windows 上的 Chrome(Windows 上的 Safari 未经过验证),如 Issue 106662 of the Chromium bug tracker 所述.从词法上讲,Windows 上的 Chrome 会接受 CSS 样式表中的 -webkit-optimize-contrast 值,但它不会有任何效果。我希望它有一天会奏效,并且这种方法将是获得最近邻放大的正确方法,但就目前而言,使用这种方法意味着 Windows Chrome 用户将不得不忍受这种模糊。

关于javascript - Canvas 中的最近邻渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3303606/

相关文章:

javascript - 如何使用 javascript 检查 URL 是否存在

html - 如何使 100% 高度在滚动的、固定位置的标题中表现得像预期的那样?

animation - 使用请求动画帧更改 Canvas 动画的持续时间

javascript - 如何从 Canvas 的图像数据读取值

javascript - kendo ui Typescript this 关键字

javascript - 根据传入的 props 有条件地设置模态的宽度

javascript - 使用 RxJS 创建一个切换按钮

javascript - 用鼠标在 gnuplot 中旋转动画图像

php - PHP 中 HTML head 的最佳实践

javascript - canvas toDataURL() 返回透明图像