首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Html5 canvas drawImage:如何应用抗锯齿

Html5 canvas drawImage:如何应用抗锯齿
EN

Stack Overflow用户
提问于 2013-07-25 22:51:00
回答 5查看 59.8K关注 0票数 83

请看下面的例子:

http://jsfiddle.net/MLGr4/47/

代码语言:javascript
复制
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

img = new Image();
img.onload = function(){
    canvas.width = 400;
    canvas.height = 150;
    ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, 400, 150);
}
img.src = "http://openwalls.com/image/1734/colored_lines_on_blue_background_1920x1200.jpg";

正如你所看到的,图像并不是抗锯齿的,尽管据说drawImage会自动应用抗锯齿。我尝试了许多不同的方法,但似乎不起作用。您能告诉我如何获得抗锯齿图像吗?谢谢。

EN

回答 5

Stack Overflow用户

发布于 2015-07-01 03:25:14

对于这样的任务,我强烈推荐使用pica。它的质量优于多次缩容,同时速度也相当快。这是一个demo

票数 12
EN

Stack Overflow用户

发布于 2014-08-27 22:12:29

除了Ken的答案之外,这里还有另一个解决方案,将下采样分成两半执行(因此,使用浏览器的算法,结果看起来很好):

代码语言:javascript
复制
  function resize_image( src, dst, type, quality ) {
     var tmp = new Image(),
         canvas, context, cW, cH;

     type = type || 'image/jpeg';
     quality = quality || 0.92;

     cW = src.naturalWidth;
     cH = src.naturalHeight;

     tmp.src = src.src;
     tmp.onload = function() {

        canvas = document.createElement( 'canvas' );

        cW /= 2;
        cH /= 2;

        if ( cW < src.width ) cW = src.width;
        if ( cH < src.height ) cH = src.height;

        canvas.width = cW;
        canvas.height = cH;
        context = canvas.getContext( '2d' );
        context.drawImage( tmp, 0, 0, cW, cH );

        dst.src = canvas.toDataURL( type, quality );

        if ( cW <= src.width || cH <= src.height )
           return;

        tmp.src = dst.src;
     }

  }
  // The images sent as parameters can be in the DOM or be image objects
  resize_image( $( '#original' )[0], $( '#smaller' )[0] );
票数 5
EN

Stack Overflow用户

发布于 2014-04-23 22:25:02

代码语言:javascript
复制
    var getBase64Image = function(img, quality) {
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;
    var ctx = canvas.getContext("2d");

    //----- origin draw ---
    ctx.drawImage(img, 0, 0, img.width, img.height);

    //------ reduced draw ---
    var canvas2 = document.createElement("canvas");
    canvas2.width = img.width * quality;
    canvas2.height = img.height * quality;
    var ctx2 = canvas2.getContext("2d");
    ctx2.drawImage(canvas, 0, 0, img.width * quality, img.height * quality);

    // -- back from reduced draw ---
    ctx.drawImage(canvas2, 0, 0, img.width, img.height);

    var dataURL = canvas.toDataURL("image/png");
    return dataURL;
    // return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17861447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档