[英]How to fix EXIF orientation on before upload with angular-file-upload
我正在使用angular-file-upload指令上传文件,我在使用Apple设备拍摄的图像或照片时遇到问题,我了解到Apple在图像上包含了exif方向数据以纠正在Apple设备上的观看,但是当这些图像在网络上上传时应用程式的方向对浏览器来说是错误的。
我在我的应用程序的多个视图中使用了该指令,因为将时间区域更改为ng-file-upload等不是最佳选择。
还有其他一些指令可以解决此问题,例如ng-file-upload,但我想知道如何使用angular-file-upload的onBeforeUploadItem事件解决此问题。
现在我解决了。
这是我的工作。
这是html中的代码:
<input id="upload_button" type="file" nv-file-select="" uploader="uploader" multiple/>
和
<img ng-show="uploader.isHTML5" ng-src="{{pic}}" height="100%" />
然后在控制器中:
var handleFileSelect = function(evt) { $scope.pic = "";
var target = evt.dataTransfer || evt.target;
var file = target && target.files && target.files[0];
var options = {
canvas: true
};
var displayImg = function(img) {
$scope.$apply(function($scope) {
$scope.pic = img.toDataURL();
$scope.rotatedFile = dataURItoBlob($scope.pic);
});
};
loadImage.parseMetaData(file, function(data) {
if (data.exif) {
options.orientation = data.exif.get('Orientation');
}
loadImage(file, displayImg, options);
});
};
angular.element(document.querySelector('#upload_button')).on('change', handleFileSelect);
var dataURItoBlob = function(dataURI) {
var binary = atob(dataURI.split(',')[1]);
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
var array = [];
for(var i = 0; i < binary.length; i++) {
array.push(binary.charCodeAt(i));
}
return new Blob([new Uint8Array(array)], {type: mimeString});
};`
然后,在上传之前:
uploader.onBeforeUploadItem = function(item) {
$log.debug('onBeforeUploadItem', item);
item._file = $scope.rotatedFile;
};
并且您需要在app.js中使用loader-image.min.js , ng-img-crop.js和[ngImgCrop]
就是这样。
我希望它对你有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.