在KineticJS中使用.toImage()方法时,我似乎总是得到比实际需要的更大的图像,我需要的部分只占据数据图像的左上角。我的舞台根据窗口大小和预定义的初始大小进行缩放(在窗口调整大小,调整大小的舞台功能,调用容器的比例和大小)。当我使用toImage()来补偿这个时,我应该设置某种裁剪吗?看一下图像,整体图像看起来大约是它所需尺寸的两倍,而我需要的尺寸大约是我需要尺寸的一半,当尺度大约为0.5时(舞台大约是一半尺寸因为我使用Chrome并在底部打开开发栏以进行调试。
以下是我现在正在使用的内容:
desc.toImage({
width: sideW / cvsObj.scale,
height: sideH / cvsObj.scale,
callback: function(img) {
desc.hide();
sideImg.transitionTo({x : sideW / 2, width : 0, duration : 0.25, callback : function() {
// add image to emulate content
var params = {name : 'descimg', width : sideW, height : sideH, image : img, x : sideW / 2, y : 0};
var image = new Kinetic.Image(params);
side.add(image);
image.setWidth(1);
sideImg.hide();
image.transitionTo({x : 0, width : sideW, duration : 0.25, callback : function() {
side.add(desc);
desc.show();
image.hide();
cvsObj.page.draw();
}});
}});
}
});
答案 0 :(得分:0)
随着时间的推移,KineticJs已有所改进,功能现在以“更好”的方式发挥作用。试试新的KineticJS 4.3:
http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.3.0.min.js
答案 1 :(得分:0)
我在两个半月前发布了这个问题,直到今天才收到回复。我一直在与KineticJS保持同步 - 甚至添加我自己的错误报告和代码建议。然而,最近我重新审视了这段特殊代码并提出了一些更好的东西 - 我现在回来的图像现在被正确裁剪并且可以按原样插入到我的画布层中。这是代码:
// grp = kinetic group, iw = image width, ih = image height, rimg = returned image array for a deferred function, cvsobj.scale is a global stage scale variable (i scale the stage to fit the window)
getImage : function(grp, iw, ih, rimg) {
var dfr = $.Deferred();
var gp = grp.getAbsolutePosition();
grp.toImage({
width: iw * cvsObj.scale,
height: ih * cvsObj.scale,
x : gp.x,
y : gp.y,
callback: function(img) {
rimg.push(img);
dfr.resolve(rimg);
}
});
return dfr.promise();
}
这是一个扩展的原型函数 - 子部分功能的一部分,用于将图层的整个图层或部分转换为专门用于在动画序列中进行操作的图像。希望这有助于其他人。