Canvas-Canvas图像处理、图片查看器、图像缩放功能的实现
Canvas---Canvas图像处理、图片查看器、图像缩放功能的实现。
本文由 **** MIKUScallion 原创,更多canvas案例代码:http://blog.****.net/mikuscallion
模仿手机图像查看软件用canvas实现一个图像查看器。
目前实现:
利用将图像起点绘制到canvas之外的技术实现了图像的缩放。
包括,图像自适应、图像放大缩小
下一步准备实现:
鼠标拖动图像
截图:
总结下要点与步骤:
要点:图像缩放与自适应要一起做的话,缩放对象实际是canvas,然后图像去对新的canvas做自适应。
步骤:
1.缩放canvas,得到缩放后的canvas的长宽。
2.图像对于缩放后的canvas做自适应,得到图像的长宽。
3.利用旧canvas的中心点与缩放后图像的长宽,计算图像绘制起点。
4.调用drawImage();方法,传入图像,绘制起点,缩放长宽。
本文由 **** MIKUScallion 原创,更多canvas案例代码:http://blog.****.net/mikuscallion
下面是源代码:
①页面代码
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <style type="text/css"> canvas{ background-color: black; } .contain{ margin: 0 auto; width: 480px; height: 640px; position: relative; } .scaleSlider{ margin: 0px; padding: 0px; position: absolute; /*旋转元素*/ transform:rotate(-90deg); top: 70px; left:400px; } </style> <script type="text/javascript" src="mikuCanvasImageUtil.js"></script> </head> <body> <div class="contain"> <input id="scaleSlider" class="scaleSlider" type="range" min="0.25" max="4" step="0.01" value="1" /> <canvas id="canvas" width="480" height="640"> </canvas> </div> </body> <script type = "text/javascript"> var canvas = document.getElementById("canvas"); var context = canvas.getContext("2d"); var scaleSlider = document.getElementById("scaleSlider"); var image = new Image(); var imageUtil = new MikuCanvasImageUtil(); image.src ="miku01.jpg"; image.onload = function(){ //将图像缩放后绘制到canvas中央 imageUtil.drawScaleImageInCenter(context,image); } scaleSlider.onchange = function(){ //清除屏幕 context.clearRect(0,0,canvas.width,canvas.height); //根据缩放比例将图像在中心缩放 imageUtil.scaleImgInCenter(context,image,scaleSlider.value,false); } </script> </html>
②图像工具代码
var MikuCanvasImageUtil = function(){ } MikuCanvasImageUtil.prototype = { //--------------------------------------------------------------------------------- //图像在canvas中心区域按照给定比例缩放 //noOver表示是,阻止过度缩放?默认true //date:2014-1-31 //author:MIKUScallion scaleImgInCenter:function (context,image,scale,noOver){ //获得原有canvas长宽 var cw = context.canvas.width; var ch = context.canvas.height; //获得缩放后的canvas长宽 var scaledCw = cw*scale; var scaledCh = ch*scale; //获得相对新canvas的缩放对象 var scaleObj = this.getScaleObj(image,scaledCw,scaledCh,noOver); //获取原有canvas中心坐标 var canvasCenterX = context.canvas.width/2; var canvasCenterY = context.canvas.height/2; //相对于canvas中心点计算,图像顶点 var imageStartPointX = canvasCenterX - scaleObj.width/2; var imageStartPointY = canvasCenterY - scaleObj.height/2; //绘制图像 context.drawImage(image,imageStartPointX,imageStartPointY,scaleObj.width,scaleObj.height); }, //将image缩放后绘制到canvas中心 //date:2014-1-31 //author:MIKUScallion drawScaleImageInCenter:function(context,image){ //获取canvas中心坐标 var canvasCenterX = context.canvas.width/2; var canvasCenterY = context.canvas.height/2; //相对原本的canvas获取缩放对象 var scaleObj = this.getScaleObj(image,context.canvas.width,context.canvas.height); //计算图像顶点 var imageStartPointX = canvasCenterX - scaleObj.width/2; var imageStartPointY = canvasCenterY - scaleObj.height/2; //绘制图像 context.drawImage(image,imageStartPointX,imageStartPointY,scaleObj.width,scaleObj.height); }, //获得图像相对与一个矩形的缩放对象 //该对象包含:width,height //date:2014-1-31 //author:MIKUScallion getScaleObj:function(image,width,height,noOver){ //默认不能过度缩放 noOver = noOver===undefined? true:noOver; var scaleW,scaleH; var widthLonger = image.width - width; var heightLonger = image.height - height; if(noOver){ //图像无需缩放 if(widthLonger <=0 && heightLonger<=0 ){ scaleW = image.width; scaleH = image.height; return { width:scaleW, height:scaleH }; } } //固定宽度缩放 if(widthLonger >= heightLonger){ scaleW = width; var percent = width/image.width; scaleH = image.height*percent; } //固定长度缩放 else{ scaleH = height; var percent = height/image.height; scaleW = image.width*percent; } //---------------- return { width:scaleW, height:scaleH }; } }
本文由 **** MIKUScallion 原创,更多canvas案例代码:http://blog.****.net/mikuscallion