使用二进制细分算法用js缩放图像
Scaling images with js using binary subdivison algorithm
我可以使用自定义算法(如二进制细分或其他算法)在js/cavas中缩放图像吗?
是。。。您可以使用html5画布进行自定义图像细分
如果您正在进行简单的二进制细分,则可以使用扩展版本的context.drawImage
从主画布中剪裁每个平铺,并根据需要缩放任何细分。请参阅下面的示例。
非二进制细分有点棘手
自定义算法必须生成所需细分的每个单独路径的顶点或曲线控制点。
技术是对细分的每个元素重复这个过程:
-
创建一个临时画布:var tempCanvas=document.createElement('canvas');
-
使用
tempContext.scale
缩放画布 -
使用上下文路径命令在图像上定义子路径:
tempContext.beginPath ...
-
使用
tempContext.clip
限制将来绘制到该路径 -
使用
tempContext.drawImage
在画布上绘制图像。由于已经定义了剪切区域,因此图像将仅在您定义的路径内绘制。 -
使用此临时画布作为图像源在主画布上绘制细分:
mainContext.drawImage(tempCanvas,x,y)
以下是带有缩放的简单二进制细分的示例代码和演示:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var subdivisions=[];
var subdivisionIndex=0;
subdivisions.push({
x:0,y:0,
width:174/2,height:110/2,
scale:1.00,maxScale:2.00,scaleDirection:1
});
subdivisions.push({
x:174/2,y:0,
width:174/2,height:110/2,
scale:1.00,maxScale:2.00,scaleDirection:1
});
subdivisions.push({
x:0,y:110/2,
width:174/2,height:110/2,
scale:1.00,maxScale:2.00,scaleDirection:1
});
subdivisions.push({
x:174/2,y:110/2,
width:174/2,height:110/2,
scale:1.00,maxScale:2.00,scaleDirection:1
});
var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/cars.jpg";
function start(){
animate();
}
function draw(s){
var x=s.x;
var y=s.y;
var w=s.width;
var h=s.height;
var scaledW=w*s.scale;
var scaledH=h*s.scale;
ctx.clearRect(0,0,cw,ch);
ctx.drawImage(img,0,0);
ctx.drawImage(
img, // clip from img
x,y,w,h, // clip a subdivision
x,y,scaledW,scaledH // draw the subdivision scaled
)
}
function animate(){
requestAnimationFrame(animate);
var s=subdivisions[subdivisionIndex];
draw(s);
if(s.scaleDirection>0){
s.scale*=1.02;
if(s.scale>s.maxScale){s.scaleDirection=-1;}
}else{
s.scale/=1.02;
if(s.scale<1.00){
s.scale=1.00;
s.scaleDirection=1;
subdivisionIndex++;
if(subdivisionIndex>subdivisions.length-1){
subdivisionIndex=0;
}
}
}
}
body{ background-color: ivory; padding:10px; }
#canvas{border:1px solid red;}
<h4>Scaling subdivisions of a binary subdivided image</h4>
<canvas id="canvas" width=300 height=300></canvas>
相关文章:
- 自动缩放图像以匹配文本高度
- 使用-webkit transform:scale()缩放图像
- 缩放图像灯箱
- 保持可缩放图像的纵横比
- 使用 HTML 输出标记查看可缩放图像并分配 src
- 使用弹性框和缩放图像并保持在同一行上
- 查找图像上两点之间的距离,即使缩放图像也是如此
- 当只给定宽度或高度时,是否所有浏览器都按比例缩放图像
- 获取缩放图像的尺寸
- 从输入[类型=文件]缩放图像
- 如何防止 javascript drawImage() 缩放图像
- HTML 画布:缩放图像以适合而不拉伸
- 缩放图像,而不是在调整浏览器窗口大小时环绕图像
- 从中心缩放图像(fabricjs)
- 使用 CSS 在 HTML 中缩放图像
- jQuery SpriteSpin 缩放图像
- 如何更改数据缩放图像值
- 使用 jquery 悬停时缩放图像
- 使用鼠标向下拖动以缩放图像缩略图
- 我如何创建鼠标滚轮可缩放图像