1

我有一个内置于 iOS 设备的 AS3/Air 应用程序。在应用程序中,我允许用户使用此处的代码从相机胶卷中选择图像http://www.adobe.com/devnet/air/articles/uploading-images-media-promise.html但是对于一些图像,当他们上传它们旋转不正确。

我已经阅读了一些 EXIF 数据,但我不知道如何获取这些数据,或者这是否是设置方向的正确数据。

任何帮助表示赞赏。

4

2 回答 2

1

是的,您确实需要阅读 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;
}

编辑:如果您在实现它时遇到问题,请发表评论,我将发布完整的代码。但从我提到的线程中可以理解。

于 2013-08-27T21:23:12.390 回答
0

puks1978。我发现一篇文章完美解决了您的问题,适用于 iOS 和 Android。

http://blogs.adobe.com/cantrell/archives/2011/10/parsing-exif-data-from-images-on-mobile-devices.html

同时,我想问你一个关于在 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

如果你有时间,请你帮我检查一下。如果可以的话,请你把你的代码发给我好吗?非常感谢。

于 2015-03-12T07:02:25.820 回答