1

UIImage次のコードを使用してデータに変換しています。

- (NSString*)getImageTypeWithImage:(UIImage*)img
{
NSData *imageData = UIImagePNGRepresentation(img);
NSString *str = [self contentTypeForImageData:imageData];
return str;
}

UIImagePNGRepresentationorを使用UIImageJPEGRepresentationして変換していますが、画像形式を PNG または JPEG に変換しています。私は以下の方法を使用しています。

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

正確な画像形式を取得する方法はありますか..教えてください。

4

1 に答える 1

0

以下のコードを使用してテスト プロジェクトを作成した結果、次のようになりました。

2014-07-29 09:31:02.904 test[64366:60b] test.jpg = image/jpeg
2014-07-29 09:31:02.907 test[64366:60b] test.png = image/jpeg
2014-07-29 09:31:02.909 test[64366:60b] test.gif = image/jpeg
2014-07-29 09:31:02.909 test[64366:60b] ---
2014-07-29 09:31:02.910 test[64366:60b] test.jpg = image/jpeg
2014-07-29 09:31:02.910 test[64366:60b] test.png = image/png
2014-07-29 09:31:02.910 test[64366:60b] test.gif = image/gif

UIImage は常に jpeg を報告するため、UIImage からデータを抽出することは明らかに良い考えではありません。ただし、ファイルから直接データを抽出すると、正しいコンテンツ タイプが報告されます。

- (void)test 
{
    [self logContentTypeForImageFile:@"test.jpg"];
    [self logContentTypeForImageFile:@"test.png"];
    [self logContentTypeForImageFile:@"test.gif"];

    NSLog(@"---");

    [self logContentTypeForResource:@"test" ofType:@"jpg"];
    [self logContentTypeForResource:@"test" ofType:@"png"];
    [self logContentTypeForResource:@"test" ofType:@"gif"];
}

- (void)logContentTypeForResource:(NSString*)resource ofType:(NSString*)type
{
    NSString *filename = [[NSBundle mainBundle] pathForResource:resource ofType:type];
    NSData *data = [NSData dataWithContentsOfFile:filename];

    NSString *result = [self contentTypeForImageData:data];
    NSLog(@"%@.%@ = %@", resource, type, result);
}

- (void)logContentTypeForImageFile:(NSString*)filename
{
    UIImage *image = [UIImage imageNamed:filename];
    CGDataProviderRef provider = CGImageGetDataProvider(image.CGImage);
    NSData *data = (id)CFBridgingRelease(CGDataProviderCopyData(provider));

    NSString *result = [self contentTypeForImageData:data];
    NSLog(@"%@ = %@", filename, result);
}

- (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;
}
于 2014-07-29T07:32:26.520 に答える