我有一个内置于AS3 / Air for iOS设备的应用程序。在应用程序中,我允许用户使用此处的代码http://www.adobe.com/devnet/air/articles/uploading-images-media-promise.html从相机胶卷中选择图像,但是对于某些图像,上传时它们会被错误地旋转。
我已经读过有一些EXIF数据,但我不知道如何获得这个数据,或者这是否是设置方向的正确数据。
感谢任何帮助。
答案 0 :(得分:1)
是的,您需要阅读EXIF。关于@Adobe论坛有一个很好的讨论,让我看看我是否还能找到它......这是:http://forums.adobe.com/thread/875157 阅读你必须做的线程中的步骤才能使这项工作在iOS上!
让我指出一个重要的问题,因为" final"该线程中的实现并不完全是防弹的(我不确定那里是否有一些新的信息,我现在还没有通过它,太长了):
注意如果未验证流,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;
}
编辑:如果你在实现它时遇到一些问题,请发表评论,我会发布完整的代码。但从我提到的帖子中可以理解。
答案 1 :(得分:0)
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's File.upload does not work on Air SDK for iOS devices
我的示例代码已上传到github。
github.com/bluewindjava8/actionscript_file_upload_for_ios如果你有空的话,请你帮我查一下。如果可以的话,请你把你的密码发给我吗?非常感谢你。