在Chrome和Easyljs上调整HTML5 Canvas图像的大小

德扬·维塔诺夫(Deyan Vitanov)

我正在努力在Chrome的画布中调整平滑图像的大小。在firefox中,效果很好,但在Chrome中,我一直坚持使其平滑。

这是jsfiddle http://jsfiddle.net/flashmandv/oxtrypmy/

var AVATAR_SIZE = 100;
var WHITE_BORDER_SIZE = 3;

var stage = new createjs.Stage("canvas");
var avCont = new createjs.Container(); 
stage.addChild(avCont);
avCont.x = avCont.y = 20;
//add white circle
var whiteBorderCircle = new createjs.Shape();
var radius = (AVATAR_SIZE+WHITE_BORDER_SIZE*2)/2;
whiteBorderCircle.graphics.beginFill("white").drawCircle(radius, radius, radius);
avCont.addChild(whiteBorderCircle);

//add avatar image mask
var avatarMask = new createjs.Shape();
avatarMask.graphics.beginFill("red").drawCircle(AVATAR_SIZE/2+WHITE_BORDER_SIZE, AVATAR_SIZE/2+WHITE_BORDER_SIZE, AVATAR_SIZE/2);

//add avatar image
var image = new Image();    
image.onload = function(){      
    var bitmap = new createjs.Bitmap(image);
    bitmap.mask = avatarMask;
    var bounds = bitmap.getBounds();
    bitmap.scaleX = (AVATAR_SIZE+WHITE_BORDER_SIZE*2) / bounds.width;
    bitmap.scaleY = (AVATAR_SIZE+WHITE_BORDER_SIZE*2) / bounds.height;
    avCont.addChild(bitmap);
    stage.update();
}; 
image.src = 'http://files.sharenator.com/sunflowers-s800x800-423444.jpg';

注意锯齿状的图像,请帮助

用户名

这是由于剪辑在Chrome中是如何工作的。剪辑蒙版在Chrome中非常残酷,而在Firefox中,沿非直边会出现抗锯齿。

这是一个概念验证(在Chrome和FF中运行以查看不同之处):http :
//jsfiddle.net/r65fcqoy/

解决此问题的唯一方法是改用复合模式,这基本上意味着您需要重写代码,除非您使用的库以某种方式支持此方法。

复合模式的一种用途是使用它来填充画布上现有图形中的任何内容。

  • 首先,我们要创建一个想要显示图像的实心圆
  • 将合成模式更改为源入并绘制图像
  • 然后,我们回到正常的合成模式并绘制外边界

这是一种使用原始JavaScript的方法,您可以在其中控制如何将它们插入在一起-这可能不是您想要的,但是如果上述库不支持comp模式而不是剪裁,则实际上没有太多选择:

var canvas = document.getElementById('canvas'),
    ctx = canvas.getContext('2d'),
    img = new Image,
    x = 70, y =70;

var AVATAR_SIZE = 100;
var WHITE_BORDER_SIZE = 3;
var radius = (AVATAR_SIZE+WHITE_BORDER_SIZE*2)/2;

img.onload = function() {
  
  // first draw the circle for the inner image:
  ctx.arc(x, y, AVATAR_SIZE*0.5, 0 , 2*Math.PI);
  ctx.fill();
  
  // now, change composite mode:
  ctx.globalCompositeOperation = 'source-in';
  
  // draw image in top
  ctx.drawImage(img, x-AVATAR_SIZE*0.5, y-AVATAR_SIZE*0.5,
                     AVATAR_SIZE, AVATAR_SIZE);

  // change back composite mode to default:
  ctx.globalCompositeOperation = 'source-over';

  // now draw border
  ctx.beginPath();
  ctx.arc(x, y, radius + 5, 0, 2*Math.PI);
  ctx.closePath();
  ctx.lineWidth = 10;
  ctx.strokeStyle = '#ffa94e';
  ctx.stroke();
};
img.src = 'http://i.stack.imgur.com/PB8lN.jpg';
<canvas id=canvas width=500 height=180></canvas>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据图像大小调整 P5 Canvas 的大小

来自分类Dev

html5 canvas重新调整大小

来自分类Dev

HTML5 Canvas无法调整大小以填充父div

来自分类Dev

使用Canvas调整覆盖图像大小时出现问题

来自分类Dev

在提交表单html5之前调整图像大小

来自分类Dev

使用createjs / easyljs调整图像大小

来自分类Dev

使用createjs / easyljs调整图像大小

来自分类Dev

在HTML5和CSS中调整和裁剪图像

来自分类Dev

在TableView上调整图像大小

来自分类Dev

HTML、CSS 和媒体查询 - 在 Chrome 和 firefox 上调整大小是不同的

来自分类Dev

将文本调整为矩形在Canvas HTML5中调整大小

来自分类Dev

在静态背景图像上调整按钮大小和位置

来自分类Dev

调整<canvas>元素的大小

来自分类Dev

如何在Python中使用Tkinter在Canvas中调整图像大小?

来自分类Dev

HTML5 响应画布调整大小

来自分类Dev

canvas.drawBitmap位置和大小错误(无法正确放置图像)

来自分类Dev

在移动设备上调整图像大小

来自分类Dev

在html5画布上拖动图像并调整其大小

来自分类Dev

调整大小和重复图像

来自分类Dev

图像调整大小和上传

来自分类Dev

调整大小和重复图像

来自分类Dev

在调整HTML5画布大小时限制图像大小(<1MB)

来自分类Dev

HTML5 响应式画布鼠标位置和调整大小

来自分类Dev

HTML Canvas调整大小问题

来自分类Dev

调整Java图像大小

来自分类Dev

Codeigniter图像调整大小?

来自分类Dev

停止调整图像大小

来自分类Dev

调整Vaadin图像大小

来自分类Dev

调整画布图像的大小