我需要在用户浏览器中将图像划分为水平 2 行和垂直 2 行。因此,图像由 9 个部分组成。
通过画线或将 9 个部分分开一点来做到这一点。
我知道 Raphael 和 paper.js,但也许它可以在没有额外框架的情况下完成(canvas html5 和 html4 JS)。
如果你有办法,使用它是否也能够像分割蛋糕一样将一个圆圈分成 4 分?
我需要在用户浏览器中将图像划分为水平 2 行和垂直 2 行。因此,图像由 9 个部分组成。
通过画线或将 9 个部分分开一点来做到这一点。
我知道 Raphael 和 paper.js,但也许它可以在没有额外框架的情况下完成(canvas html5 和 html4 JS)。
如果你有办法,使用它是否也能够像分割蛋糕一样将一个圆圈分成 4 分?
drawImage
您可以使用画布功能对图像进行切片和分隔
所有的工作都是由context.drawImage
函数使用一些额外的参数完成的
drawImage
能够剪辑源图像的一部分并将其绘制在画布上
顺便说一句,drawImage
也能够同时缩放该剪辑部分。
以下是允许drawImage
对源图像进行切片的参数:
以下是如何使用 drawImage 将源图像切成 3x3 单元格,间距为 10px
context.drawImage(
img, // the source image
0,0, // get the image starting at it's 0,0 position
img.width, // grab the entire width of the image
img.height // grab the entire height of the image
x*img.width/3+10, // make 3 image "columns" with 10px spacing
x*img.height/3+10, // make 3 image "rows" with 10px spacing
img.width/3, // each image column is 1/3 of the original image
img.height/3 // each image row is 1/3 of the original image
);
这是代码和小提琴:http: //jsfiddle.net/m1erickson/m89Gg/
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
body{ background-color: ivory; }
canvas{border:1px solid red;}
</style>
<script>
$(function(){
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var image=new Image();
image.onload=function(){
slice(image);
}
image.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/sky-bg2.jpg";
function slice(img){
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var w=img.width; // original image width
var h=img.height; // original image height
var rows=3; // # of rows
var cols=3; // # of columns
var cw=w/rows; // cell width
var ch=h/cols; // cell height
var scale=3; // also, scale the image down
var spacing=5; // spacing between cells
// set the canvas width to accommodate
// sliced/space/scaled image
canvas.width=w/scale+spacing*2;
canvas.height=h/scale+spacing*2;
ctx.clearRect(0,0,canvas.width,canvas.height);
for(var y=0;y<3;y++){
for (var x=0;x<3;x++){
ctx.drawImage(img,x*cw,y*ch,cw,ch,
x*(cw/scale+spacing),y*(ch/scale+spacing),cw/scale,ch/scale)
}
}
ctx.stroke()
}
}); // end $(function(){});
</script>
</head>
<body>
<canvas id="canvas" width=300 height=300></canvas>
</body>
</html>