Jcrop将旋转集成到其中
Jcrop integrating rotatation into
嗨,当我旋转裁剪的图像时,我的裁剪选择器有问题。 当使用 css 旋转图像时,我的 jcrop 选择器以相反的方式移动。 我相信这是因为 jcrop 没有意识到它正在旋转,并且选择器正在根据原始图像尺寸移动。
有没有办法让我告诉jcrop图像是旋转的?
顺便说一句,我正在使用angularjs指令来实现jcrop(它是一个angularjsapp(。谢谢
指令.js
.directive('imgCropped', function() {
return {
restrict: 'E',
replace: true,
scope: {src: '@', selected: '&'},
link: function(scope, element, attr) {
var myImg;
var clear = function() {
if (myImg) {
myImg.next().remove();
myImg.remove();
myImg = undefined;
}
};
scope.$watch('src', function(nv) {
clear();
if (nv) {
element.after('<img degrees="angle" rotate/>');
myImg = element.next();
myImg.attr('src', nv);
$(myImg).Jcrop({
trackDocument: true,
onSelect: function(x) {
/*if (!scope.$$phase) {
scope.$apply(function() {
scope.selected({cords: x});
});
}*/
scope.selected({cords: x});
},
keySupport: false,
aspectRatio: 1,
boxWidth: 400, boxHeight: 400,
setSelect: [0, 0, 400, 400]
}, function(){
jcrop_api = this;
});
//$(myImg).rotate(90);
}
});
scope.$on('$destroy', clear);
}
};
})
问题与裁剪旋转图像时使 Jcrop 跟踪器不旋转相同
JCrop 存在通过 JQuery 旋转后选择方向错误的问题。我不得不通过更改 JCrop 的 js 代码来支持旋转来解决这个问题。
幸运的是,这并不难做到,您可以通过替换一行来自己完成:136到子代码:
//========= begin replace origin line 136 for rotate
var x = pos[0] - lloc[0];
var y = pos[1] - lloc[1];
var rotate = options.rotate || 0;
var angle = (rotate / 90) % 4;
if (angle == 1) {
var temp = x;
x = y;
y = - temp;
} else if (angle == 2) {
x = -x;
y = -y;
} else if (angle == 3) {
var temp = x;
x = -y;
y = temp;
}
Coords.moveOffset([x, y]);
//========= end replace origin line 136 for rotate
或者,您可以通过 url 获取更新的代码:https://github.com/ergoli/Jcrop/tree/master/js
小心!您应该在每次旋转单击后转移旋转选项:
jCropApi.setoptions({rotate : 90}); //rotate 90
最好更改此函数,以便它可以影响所有功能,而不仅仅是移动所选区域。
function mouseAbs(e) //{{{
{
//return [(e.pageX - docOffset[0]), (e.pageY - docOffset[1])];
var x = e.pageX - docOffset[0];
var y = e.pageY - docOffset[1];
var rotate = options.rotate || 0;
var angle = (rotate / 90) % 4;
if (angle == 1) {
var temp = x;
x = (e.pageY - docOffset[1]);
y = -(e.pageX - docOffset[0] - $('.jcrop-holder').height());
} else if (angle == 2) {
x = -(e.pageX - docOffset[0] - $('.jcrop-holder').width());
y = -(e.pageY - docOffset[1] - $('.jcrop-holder').height());
} else if (angle == 3) {
var temp = x;
x = -(e.pageY - docOffset[1] - $('.jcrop-holder').width());
y = (e.pageX - docOffset[0]);
}
return [x, y];
}
乔治的答案比我见过的任何其他答案都有效,除了它不处理非直角的角度(80 度、150 度等(。
基于这个算法,我想出了这个:
function mouseAbs(e) //{{{
{
//return [(e.pageX - docOffset[0]), (e.pageY - docOffset[1])];
var x = e.pageX - docOffset[0];
var y = -(e.pageY - docOffset[1]);
var centerY = -($j('.jcrop-holder').height() / 2);
var centerX = $j('.jcrop-holder').width() / 2;
var rotate = options.rotate || 0;
// radians
rotate = rotate * Math.PI / 180;
var x2 = x - centerX;
var y2 = y - centerY;
var cos = Math.cos(rotate);
var sin = Math.sin(rotate);
x = x2 * cos - y2 * sin + centerX;
y = x2 * sin + y2 * cos + centerY;
return [x, -y];
}
相关文章:
- 知道为什么我的旋转木马不会自动更改图片吗
- 如何检测用于WebGL的专用或集成显卡
- 在我的SPA应用程序中集成Facebook共享的问题
- 顺时针旋转Svg元件
- 将鼠标旋转限制为特定的度数
- vaadin:使用自定义布局集成angular js
- 旋转后拖动对象
- 禁用旋转木马中的下一个按钮和上一个按钮
- React ajax数据集成
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- 手动创建旋转活动指示器
- 如何在容器中定位旋转的图像
- IE中关于ZK和JavaScript集成的一些错误
- 在轴上旋转SVG图像
- 如何将拼写检查集成到密文编辑器
- 将外部文件与AngularJs集成
- 绕z轴旋转时出现iOS陀螺仪错误
- 旋转按钮[HTML][JS]
- 如何将tesseract OCR与Cordova/Phonegap应用程序集成
- Jcrop将旋转集成到其中