【问题标题】:Is it possible to find the file extension of a UIImage ?是否可以找到 UIImage 的文件扩展名?
【发布时间】:2013-07-24 07:43:42
【问题描述】:

我在Finding image type from NSData or UIImage 中找到了以下代码,它有助于检查 UIimage 的四种不同图像类型

     (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;
}

我想知道如何找到该文件是位图图像还是不具有 .bmp 扩展名。有人可以帮我吗。修改上面的代码以找到 bmp 或者请提供一些代码的解决方案。

提前感谢

【问题讨论】:

  • 为什么会被否决?
  • 我不知道为什么有人投了反对票。

标签: ios objective-c uiimage file-extension image-file


【解决方案1】:

您可以通过使用将图像更改为NSData
UIImageJPEGRepresentation(<#UIImage *image#>, <#CGFloat compressionQuality#>)

UIImagePNGRepresentation(<#UIImage *image#>)
方法。这样称呼它:

- (void) yourMethod{
    NSData *imageData = UIImagePNGRepresentation(yourImage);
    NSString *str = [self contentTypeForImageData:imageData];

}

- (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:
            break;
        case 0x42:
            return @"image/bmp";
        case 0x4D:
            return @"image/tiff";
    }
    return nil;
}

【讨论】:

  • 您好,感谢您的回复,但我听说这种方法不适用于 UIImage,因为将图像转换为 UIImage 会隐藏其所有基础数​​据并将其创建为位图图像。 iphonedevsdk.com/discussion/comment/471725#Comment_471725 可能这就是为什么上述方法(这就是我在几个小时前尝试过的方法)总是返回 bmp 作为任何类型图像的结果。因此,我更正了获取图像网址而不是作为 UIImage 的函数。
  • 你是如何得到图像的?
  • 这是一个 phoneGap 应用程序,所以我使用它的 getPhoto(source) 方法,其中 onPhotoURISuccess(imageURI) 方法提供图像的 URI。检查这个stackoverflow.com/questions/17873816/… FILE_URI 总是返回一个 jpeg 图像。如果使用 NATIVE_URI 而不是 FILE_URI,图像的基础数据不会丢失。实际上,如果我将 NATIVE_URI 传递给上面显示的 contentTypeForImageData() 函数,我直接将 URI 转换为 NSData,该函数会返回正确的输出!
  • 如果你做了 UIImagePNGRepresentation,你已经知道它是一个 PNG。
【解决方案2】:

根据wikipedia,非OS/2 BMP 文件以0x42 0x4D(ASCII 格式的BM)开头。

case 0x42:
    return @"image/bmp";

【讨论】:

  • 您好,感谢您的回复。 Wiki 说 0x42 或 0x4D 都是 bmp 吗?但是情况 0x4D:return @"image/tiff";已经将其识别为 tiff,对吧?那么,我只检查 BMP 的 0x4D 是否正确?抱歉,我对此一无所知。请纠正我。
  • 有谁知道在发送到这个方法之前应该如何将 UIimage 转换为 NSdata。我使用 NSData *imageData=UIimageJPEGRepresentatio(image, 1.0);甚至还使用了 PNGRepresentation。但它总是以 bmp 的形式返回它
猜你喜欢
  • 1970-01-01
  • 2013-06-17
  • 2022-12-01
  • 1970-01-01
  • 2020-05-16
  • 2011-07-30
  • 2015-09-17
  • 2014-12-13
  • 1970-01-01
相关资源
最近更新 更多