Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';无法使用loadImage.parseMetaData获取EXIF信息_Javascript_Exif_Loadimage - Fatal编程技术网

Javascript Can';无法使用loadImage.parseMetaData获取EXIF信息

Javascript Can';无法使用loadImage.parseMetaData获取EXIF信息,javascript,exif,loadimage,Javascript,Exif,Loadimage,我正在使用JavaScript LoadImage.parseMetaData()尝试在web上获取图像的方向,以便旋转图像 如果我硬编码方向(请参阅第二次loadImage调用中的“方向:3”),我可以旋转它。。。但是我尝试使用loadImage.parseMetaData来获取方向 我使用了基于web的EXIF解析器,图像中有方向信息 当我调用loadImage.parseMetaData时,“data.exif”似乎为空。看这把小提琴: 欢迎您提出任何正确定位图像的想法或替代方法。为什么您

我正在使用JavaScript LoadImage.parseMetaData()尝试在web上获取图像的方向,以便旋转图像

如果我硬编码方向(请参阅第二次loadImage调用中的“方向:3”),我可以旋转它。。。但是我尝试使用loadImage.parseMetaData来获取方向

我使用了基于web的EXIF解析器,图像中有方向信息

当我调用loadImage.parseMetaData时,“data.exif”似乎为空。看这把小提琴:


欢迎您提出任何正确定位图像的想法或替代方法。

为什么您要创建一个新的blob,而您却要求创建一个blob?元数据随后会丢失,这就是为什么会丢失它,并且exif为null。 只需替换:

var blob = new Blob([this.response], {type: 'image/png'});
作者:


应该这样做。

也有同样的问题,我更改了“arrayBuffer”的响应类型,然后根据响应创建blob

xhr.responseType = 'arraybuffer';

xhr.onload = function (e) {
if (this.status == 200) {
   var arrayBufferView = new Uint8Array(this.response);
   var blob = new Blob([arrayBufferView], { type: "image/jpeg" });
   ...

对loadImage的调用需要位于对parseMetaData的调用的回调中


原因是:按原样,您的代码包含竞争条件。调用loadImage很可能是在调用parseMetaData完成并填充方向之前进行的,因为它们都是异步调用。

谢谢@MaX。我确实在JSFIDLE中进行了替换,并且最初也尝试过这一点。。。我仍然在控制台日志中看到“ori是:未定义的”。您解决了这个问题吗?嗯。我停止使用文件选择器。。。最近又回到了它,在一次成功的上传后,他们在blob中传回了mimetype。因此,我从未测试过下面提出的解决方案,因为它们变得多余。不知道我该如何在Stackoverflow上标记这个问题?
var blob = this.response;
xhr.responseType = 'arraybuffer';

xhr.onload = function (e) {
if (this.status == 200) {
   var arrayBufferView = new Uint8Array(this.response);
   var blob = new Blob([arrayBufferView], { type: "image/jpeg" });
   ...