将任意图像转成 HTML5 Canvas

本文介绍了一段JavaScript代码,演示如何通过输入任意图像URL,并点击按钮将其转换为Canvas画布上的图案。代码包括获取图像、设置Canvas尺寸、创建模式并绘制图像到Canvas的过程。

在开始讲解技术细节之前请先看这个演示程序,输入任意的图像URL,然后点击 Img2Canvas 按钮

BTW: 同样接受 data-uri 格式数据。

代码:

01function draw() {
02        // Get the canvas element and set the dimensions.
03        var canvas = document.getElementById('canvas');
04        canvas.height = window.innerHeight;
05        canvas.width = window.innerWidth;
06  
07       // Get a 2D context.
08        var ctx = canvas.getContext('2d');
09  
10        // create new image object to use as pattern
11        var img = new Image();
12        img.src = document.getElementById('url').value;
13        img.onload = function(){
14            // Create pattern and don't repeat!
15           var ptrn = ctx.createPattern(img,'no-repeat');
16           ctx.fillStyle = ptrn;
17           ctx.fillRect(0,0,canvas.width,canvas.height);
18  
19        }
20 }

应用逻辑:

关键的地方在于 createPattern()

nsIDOMCanvasPattern createPattern(in nsIDOMHTMLElement image, in DOMString repetition);
context.createPattern(image,"repeat|repeat-x|repeat-y|no-repeat");

01var img = new Image,
02   canvas = document.createElement("canvas"),
03   ctx = canvas.getContext("2d"),
04   src = "http://example.com/image"; // insert image url here
05 
06  img.crossOrigin = "Anonymous";
07 
08   img.onload = function() {
09     canvas.width = img.width;
10     canvas.height = img.height;
11     ctx.drawImage( img, 0, 0 );
12    localStorage.setItem( "savedImageData", canvas.toDataURL("image/png") );
13  }
14 
15  img.src = src;
16  // make sure the load event fires for cached images too
17  if ( img.complete || img.complete === undefined ) {
18     img.src ="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
19     img.src = src;
20 }

英文原文OSCHINA原创翻译

转载于:https://my.oschina.net/u/558276/blog/77383

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值