HTML5-Canvas对图片的操作
2013-05-08 13:28
441 查看
转自:http://www.cnblogs.com/uuuuuu/archive/2013/03/12/2956135.html
Canvas图片API非常强大,有两个最基础的方法,一是展示图片,二是像素级的修改图片后再把它打印到画布上。
1、通过drawImage()将图片显示在画布上
var img = new Image();
img.src = '';
img.onload = function(){
ctx.drawImage(img,0,0)
}
2、截取图片的一部分到画布上
//(sx , sy )开始位置
//(sw , sh )目标大小(缩放)
//(dx , dy )截取开始位置
//(dw , dh )截取大小
function drawImage(Image , sx , sy , sw , sh , dx , dy , dw , dh){
//code...
}
//看第四个缩放和平移图片的例子就会发现这个函数的强大之处
3、旋转图片
/*
1、将当前的画布背景保存起来,context.save()
2、重置变换矩阵,context.setTransform(1,0,0,1,0,0);
3、编码转换角度的算法,angle = 90 * Math.PI / 180;使用PI单位
context.translate(x,y),因为旋转的整个画布对象
4、context.drawImage
*/
function rotate() {
ctx.save();
ctx.setTransform(1,0,0,1,0,0);
ctx.translate(0,0)
var angle = 90 * Math.PI / 180;
ctx.rotate(angle);
ctx.drawImage(img1,10,30);
ctx.restore();
}
4、缩放和平移一张图片
强大drawImage()方法可以完成一切需求
看这个测试demo:
http://beyeah.sinaapp.com/canvas/zoom-pan.html
5、像素处理
imagedata = context.createImageData(sw, sh)
// 创建一个100x100的区域来存储像素信息
imagedata = context.createImageData(imagedata)
// like copy
imagedata = context.createImageData()
// 创建一个空的图像实例
ImageData 对象带有三个属性
imagedata.width,
imagedata.height,
imagedata.data:存储着图片像素数据的数组,每四个数分别代表一个像素点的R,G,B,alpha透明度值
获取图像数据:
imagedata = context.getImageData(sx,sy,sw,sh);
四个参数定义位置和大小的矩形并从画布上复制到imagedata实例中
将图像数据打印到画布上:
context.putImageData(imagedata,dx,dy)
context.putImageData(imagedata,dx,dy [,dirtyX,dirtyY,dirtyWidth,dirtyHeight])
修改像素信息:
/*
* 对像素的透明属性进行修改时,值范围是0~255(许多地方此值的范围是0-1)
*
*/
for(var j=3;j<imageData.data.length;j+=4){
imageData.data[j] = 128;
}
---
出于安全考虑,只能操作来自同域下的图片资源。而在本地测试时,大部分浏览器会认为来自本地的图片是来自另外一个域。
所以测试时,需要搭建一个web服务器
6、将一个canvas对象复制至另一个canvas对象中
thecanvas = d.getElementById('canvas')
context.drawImage(thecanvas,0,0);
Canvas图片API非常强大,有两个最基础的方法,一是展示图片,二是像素级的修改图片后再把它打印到画布上。
1、通过drawImage()将图片显示在画布上
var img = new Image();
img.src = '';
img.onload = function(){
ctx.drawImage(img,0,0)
}
2、截取图片的一部分到画布上
//(sx , sy )开始位置
//(sw , sh )目标大小(缩放)
//(dx , dy )截取开始位置
//(dw , dh )截取大小
function drawImage(Image , sx , sy , sw , sh , dx , dy , dw , dh){
//code...
}
//看第四个缩放和平移图片的例子就会发现这个函数的强大之处
3、旋转图片
/*
1、将当前的画布背景保存起来,context.save()
2、重置变换矩阵,context.setTransform(1,0,0,1,0,0);
3、编码转换角度的算法,angle = 90 * Math.PI / 180;使用PI单位
context.translate(x,y),因为旋转的整个画布对象
4、context.drawImage
*/
function rotate() {
ctx.save();
ctx.setTransform(1,0,0,1,0,0);
ctx.translate(0,0)
var angle = 90 * Math.PI / 180;
ctx.rotate(angle);
ctx.drawImage(img1,10,30);
ctx.restore();
}
4、缩放和平移一张图片
强大drawImage()方法可以完成一切需求
看这个测试demo:
http://beyeah.sinaapp.com/canvas/zoom-pan.html
5、像素处理
imagedata = context.createImageData(sw, sh)
// 创建一个100x100的区域来存储像素信息
imagedata = context.createImageData(imagedata)
// like copy
imagedata = context.createImageData()
// 创建一个空的图像实例
ImageData 对象带有三个属性
imagedata.width,
imagedata.height,
imagedata.data:存储着图片像素数据的数组,每四个数分别代表一个像素点的R,G,B,alpha透明度值
获取图像数据:
imagedata = context.getImageData(sx,sy,sw,sh);
四个参数定义位置和大小的矩形并从画布上复制到imagedata实例中
将图像数据打印到画布上:
context.putImageData(imagedata,dx,dy)
context.putImageData(imagedata,dx,dy [,dirtyX,dirtyY,dirtyWidth,dirtyHeight])
修改像素信息:
/*
* 对像素的透明属性进行修改时,值范围是0~255(许多地方此值的范围是0-1)
*
*/
for(var j=3;j<imageData.data.length;j+=4){
imageData.data[j] = 128;
}
---
出于安全考虑,只能操作来自同域下的图片资源。而在本地测试时,大部分浏览器会认为来自本地的图片是来自另外一个域。
所以测试时,需要搭建一个web服务器
6、将一个canvas对象复制至另一个canvas对象中
thecanvas = d.getElementById('canvas')
context.drawImage(thecanvas,0,0);
相关文章推荐
- [js高手之路] html5 canvas系列教程 - 图片操作(drawImage,clip,createPattern)
- HTML5 Canvas图片操作简单实例1
- [js高手之路] html5 canvas系列教程 - 图片操作(drawImage,clip,createPattern)
- HTML5-Canvas对图片的操作
- 将HTML5 Canvas的内容保存为图片
- HTML5(九)canvas操作文字实例之转盘
- 基于HTML5 Canvas实现的图片马赛克模糊特效
- html5<canvas操作文字实例之转盘>
- JavaScript+html5 canvas实现图片破碎重组动画特效
- HTML5画布Canvas图片抽取、像素信息获取、命中检测
- HTML5 canvas之图片批量加载
- 【坑】【实例】【未解决】html5-canvas中实现图片的浮雕效
- html5 canvas上传图片后预览
- HTML5 canvas 画网页验证码(验证码一般不可能是一张图片)
- HTML5 canvas 9绘制图片实例详解
- HTML5 Canvas 开发 绘图方法整理 【十四、将 Canvas画布 作为图片保存并下载】
- 导出HTML5 Canvas图片,并上传服务器
- HTML5 Canvas显示本地图片实例1
- [js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)
- 利用HTML5中Canvas处理并存储图片