• <i id='7kilN'><tr id='7kilN'><dt id='7kilN'><q id='7kilN'><span id='7kilN'><b id='7kilN'><form id='7kilN'><ins id='7kilN'></ins><ul id='7kilN'></ul><sub id='7kilN'></sub></form><legend id='7kilN'></legend><bdo id='7kilN'><pre id='7kilN'><center id='7kilN'></center></pre></bdo></b><th id='7kilN'></th></span></q></dt></tr></i><div id='7kilN'><tfoot id='7kilN'></tfoot><dl id='7kilN'><fieldset id='7kilN'></fieldset></dl></div>
      • <bdo id='7kilN'></bdo><ul id='7kilN'></ul>

      <small id='7kilN'></small><noframes id='7kilN'>

        <legend id='7kilN'><style id='7kilN'><dir id='7kilN'><q id='7kilN'></q></dir></style></legend>

        <tfoot id='7kilN'></tfoot>

        HTML5 Canvas 图像缩放问题

        HTML5 Canvas Image Scaling Issue(HTML5 Canvas 图像缩放问题)
      1. <i id='6l28z'><tr id='6l28z'><dt id='6l28z'><q id='6l28z'><span id='6l28z'><b id='6l28z'><form id='6l28z'><ins id='6l28z'></ins><ul id='6l28z'></ul><sub id='6l28z'></sub></form><legend id='6l28z'></legend><bdo id='6l28z'><pre id='6l28z'><center id='6l28z'></center></pre></bdo></b><th id='6l28z'></th></span></q></dt></tr></i><div id='6l28z'><tfoot id='6l28z'></tfoot><dl id='6l28z'><fieldset id='6l28z'></fieldset></dl></div>

          <bdo id='6l28z'></bdo><ul id='6l28z'></ul>
              <legend id='6l28z'><style id='6l28z'><dir id='6l28z'><q id='6l28z'></q></dir></style></legend>
                <tbody id='6l28z'></tbody>
              1. <tfoot id='6l28z'></tfoot>

                <small id='6l28z'></small><noframes id='6l28z'>

                1. 本文介绍了HTML5 Canvas 图像缩放问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在尝试在 HTML5 画布中制作像素艺术主题游戏,作为其中的一部分,我使用以下代码将 10x20 左右大小的图像绘制到画布上:

                  I am trying to make a pixel art themed game in HTML5 canvas, and as part of that I take 10x20 or so sized images and draw them onto the canvas with the following code:

                  ctx.drawImage(image, 20, 20, 100, 200);
                  

                  但是画布使用双三次图像缩放,因此像素艺术图像在 2 倍及以上时看起来很糟糕.有没有办法强制画布使用最近邻缩放或可能使用自定义方法来缩放图像?如果不是,这是否意味着必须事先在 Paint.net 中对图像进行缩放?

                  However the canvas uses bicubic image scaling and hence the pixel art images look terrible at 2x and up. Is there a way to force canvas to use nearest neighbor scaling or possibly use a custom method to scale images? If not does that mean the images have to be scaled beforehand in something like Paint.net?

                  推荐答案

                  选择以下任意一项:

                  通过 JavaScript:

                  ctx.imageSmoothingEnabled = false;
                  

                  来源:http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#image-smoothing

                  在 Gecko 上,您需要

                  On Gecko, you'll need

                  ctx.mozImageSmoothingEnabled = false;
                  

                  来源:https://developer.mozilla.org/en/DOM/CanvasRenderingContext2D#Gecko-specific_attributes

                  在 Webkit 上,您需要

                  On Webkit, you'll need

                  ctx.webkitImageSmoothingEnabled = false;
                  

                  来源:https://bugs.webkit.org/show_bug.cgi?id=82804

                  我找不到其他浏览器支持此属性的信息,所以他们可能不支持它.

                  I couldn't find information on support of this property on other browsers, so they probably don't support it.

                  通过 CSS:

                  另一种选择是在画布上使用一组 CSS 规则.例如:

                  Another option is to use a set of CSS rules on the canvas. For example:

                  <canvas id="c" width="16" height="16"></canvas>
                  <script>
                    var c = document.getElementById("c"),
                        cx = c.getContext("2d"),
                        im = new Image();
                    im.src = "http://stackoverflow.com/favicon.ico"; // 16x16
                    cx.drawImage(im, 0, 0);
                  </script>
                  <style>
                    canvas {
                      width: 32px;
                      height: 32px;
                      image-rendering: optimizeSpeed;
                      image-rendering: crisp-edges;
                      image-rendering: -moz-crisp-edges;
                      image-rendering: -o-crisp-edges;
                      image-rendering: -webkit-optimize-contrast;
                      -ms-interpolation-mode: nearest-neighbor;
                    }
                  </style>
                  

                  来源:https://developer.mozilla.org/en/CSS/图像渲染
                  来源:https://bugs.webkit.org/show_bug.cgi?id=56627

                  通过像素例程:

                  另一种选择是自己使用画布像素操作例程:http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#pixel-manipulation.不过,这还有很多工作要做.

                  Yet another option is to do it yourself using the canvas pixel manipulation routines: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#pixel-manipulation. That's a lot more work, though.

                  这篇关于HTML5 Canvas 图像缩放问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  How does object-fit work with canvas element?(对象适合如何与画布元素一起使用?)
                  How to make rooftext effect and valley text effect in HTML5 (or Fabric.js)(如何在 HTML5(或 Fabric.js)中制作屋顶文字效果和山谷文字效果)
                  Draw border around nontransparent part of image on canvas(在画布上的图像不透明部分周围绘制边框)
                  dragging and resizing an image on html5 canvas(在 html5 画布上拖动图像并调整其大小)
                  What#39;s the difference between a boolean as primitive and a boolean as property of an object?(作为原始对象的布尔值和作为对象属性的布尔值有什么区别?)
                  I want to do animation of an object along a particular path(我想沿特定路径对对象进行动画处理)
                    <tbody id='gTvVY'></tbody>
                2. <legend id='gTvVY'><style id='gTvVY'><dir id='gTvVY'><q id='gTvVY'></q></dir></style></legend>

                    <tfoot id='gTvVY'></tfoot>

                    <small id='gTvVY'></small><noframes id='gTvVY'>

                    1. <i id='gTvVY'><tr id='gTvVY'><dt id='gTvVY'><q id='gTvVY'><span id='gTvVY'><b id='gTvVY'><form id='gTvVY'><ins id='gTvVY'></ins><ul id='gTvVY'></ul><sub id='gTvVY'></sub></form><legend id='gTvVY'></legend><bdo id='gTvVY'><pre id='gTvVY'><center id='gTvVY'></center></pre></bdo></b><th id='gTvVY'></th></span></q></dt></tr></i><div id='gTvVY'><tfoot id='gTvVY'></tfoot><dl id='gTvVY'><fieldset id='gTvVY'></fieldset></dl></div>
                        <bdo id='gTvVY'></bdo><ul id='gTvVY'></ul>