我正在从第三方提供的URL加载图像.URL上没有文件扩展名(或文件名)(因为它是一个模糊的URL).我可以从中获取数据(以NSData的形式),并将其加载到UIImage中并很好地显示它.

我想把这些数据保存到一个文件中.然而,我不知道数据的格式是什么(PNG、JPG、BMP)?我假设它是JPG(因为它是一张来自网络的图片),但是有没有一种程序化的方法来确定它?我四处查看了StackOverflow和文档,没有找到任何东西.

蒂娅.


编辑:我真的需要文件扩展名吗?我将其持久化到外部存储(AmazonS3),但考虑到它将始终在iOS或浏览器的上下文中使用(这两种浏览器在没有扩展名的情况下解释数据似乎都很好),或许这不是问题.

推荐答案

如果图像文件有NSData,则可以通过查看第一个字节来猜测内容类型:

+ (NSString *)contentTypeForImageData:(NSData *)data {
    uint8_t c;
    [data getBytes:&c length:1];

    switch (c) {
    case 0xFF:
        return @"image/jpeg";
    case 0x89:
        return @"image/png";
    case 0x47:
        return @"image/gif";
    case 0x49:
    case 0x4D:
        return @"image/tiff";
    }
    return nil;
}

Ios相关问答推荐

SwiftUI@Observable不跟踪父类属性中的更改以更新视图

使用SWIFT传输表示时的条件文件表示格式

带菜单的选取器不适用于Int32,但适用于Int

SwiftUI-工作表不显示导航标题

List touch Tabbar 时 SwiftUI Tabbar 消失

为 ColorPicker 创建一个名为 Color 的计算变量的绑定

SwiftUI 文本字段代理绑定代码忽略空格不起作用?

有哪些可靠的机制可以防止 CoreData CloudKit 中的数据重复?

使用实时数据库的应用程序无法在被 Firebase 阻止的罗马尼亚 ISP 中运行

如何在 Swift 3 中根据 UIImage 的大小/比率调整 UIImageView 的大小?

光标未显示在 UITextView 中

关闭所有打开的视图控制器的单个函数

是否可以在没有 Mac 的情况下为 iOS 制作 PhoneGap 应用程序?

用 PC 调试 ipad safari

使用 convertPoint 获取父 UIView 内的相对位置

Swift:调用中缺少参数标签xxx

iOS 应用程序中的手动语言 Select (iPhone 和 iPad)

iOS 7 圆形框架按钮

Parse for iOS:try 运行应用程序时出错

如何立即移动 CALayer(无动画)