我有一个内置于 iOS 设备的 AS3/Air 应用程序。在应用程序中,我允许用户使用此处的代码从相机胶卷中选择图像http://www.adobe.com/devnet/air/articles/uploading-images-media-promise.html但是对于一些图像,当他们上传它们旋转不正确。
我已经阅读了一些 EXIF 数据,但我不知道如何获取这些数据,或者这是否是设置方向的正确数据。
任何帮助表示赞赏。
我有一个内置于 iOS 设备的 AS3/Air 应用程序。在应用程序中,我允许用户使用此处的代码从相机胶卷中选择图像http://www.adobe.com/devnet/air/articles/uploading-images-media-promise.html但是对于一些图像,当他们上传它们旋转不正确。
我已经阅读了一些 EXIF 数据,但我不知道如何获取这些数据,或者这是否是设置方向的正确数据。
任何帮助表示赞赏。
是的,您确实需要阅读 EXIF。@Adobe 论坛对此进行了很好的讨论,让我看看我是否还能找到它...这里是:http ://forums.adobe.com/thread/875157 阅读该线程中的步骤,你必须使这项工作在 iOS 上工作!
让我指出一个重要问题,因为该线程中的“最终”实现并不完全是防弹的(我不确定那里是否有一些新信息,我现在不会讨论它,太长了):
请注意,如果未验证流,则 ExifInfo 的构造函数会返回:
public function ExifInfo(stream:ByteArray) {
if (!validate(stream)) {
return;
}
_tiffHeader = new TIFFHeader(stream);
readIFDs(stream);
readThumbnail(stream);
}
因此,您需要检查 exif 实例中是否存在ifds
对象。如果你不做这个检查,你会被抛出一个空指针异常。你可以使用这样的东西:
public static function getImageOrientation(imageData:ByteArray):String {
var exif:ExifInfo = new ExifInfo(imageData);
var ifd:IFD;
var str:String = "";
if(exif.ifds) { //happens only if there is info
ifd = exif.ifds.primary;
for (var entry:String in ifd) {
if(entry.toLowerCase() == "orientation"){
str = ifd[entry];
break;
}
}
}
switch(str) {
case "1": //normal
str = ImageOrientation.NORMAL;
break;
case "3": //rotated 180 degrees (upside down)
str = ImageOrientation.UPSIDE_DOWN;
break;
case "6": //rotated 90 degrees CW
str = ImageOrientation.ROTATED_LEFT;
break;
case "8": //rotated 90 degrees CCW
str = ImageOrientation.ROTATED_RIGHT;
break;
case "9": //unknown & fall-thru
default:
str = ImageOrientation.UNKNOWN;
break;
}
return str;
}
编辑:如果您在实现它时遇到问题,请发表评论,我将发布完整的代码。但从我提到的线程中可以理解。
puks1978。我发现一篇文章完美解决了您的问题,适用于 iOS 和 Android。
同时,我想问你一个关于在 iOS 设备上从 Air 上传文件的问题。您说您将图像文件上传到服务器。你是怎么上传文件的?您使用的是哪个版本的 iOS 和哪个版本的 Air SDK?你在 xxx-app.xml 文件中做了一些配置吗?
我尝试了与您相同的解决方案
www.adobe.com/devnet/air/articles/uploading-images-media-promise.html,但File.upload(URLRequest)在 iOS8 上不起作用。File.upload甚至没有向服务器端发送任何请求。似乎 Air SDK for iOS 只是由于某种原因未能发送 http 请求。
您可以转到以下链接以查看我的问题。
ActionScript 的 File.upload 不适用于 iOS 设备的 Air SDK
我的示例代码已上传到 github。
github.com/bluewindjava8/actionscript_file_upload_for_ios
如果你有时间,请你帮我检查一下。如果可以的话,请你把你的代码发给我好吗?非常感谢。