1. ホーム
  2. iphone

NSDataまたはUIImageからの画像タイプの検索

2023-11-04 02:21:17

質問

サードパーティから提供された URL から画像を読み込んでいます。URL にはファイル拡張子 (またはファイル名) がありません (不明瞭な URL であるため)。ここから (NSData の形式で) データを取得し、UIImage にロードしてうまく表示することができます。

このデータをファイルに永続化したいのです。しかし、データの形式 (PNG、JPG、BMP) がわかりません。私はそれが JPG であると仮定しますが (ウェブからの画像であるため)、確実に見つけるためのプログラム的な方法はあるでしょうか? 私はStackOverflowとドキュメントを見回しましたが、何も見つけることができませんでした。

TIA


編集:ファイル拡張子は本当に必要なのでしょうか?私はそれを外部ストレージ (Amazon S3) に保存していますが、iOS またはブラウザ (どちらも拡張子なしでデータを解釈して問題ないようです) のコンテキストで常に使用されることを考えると、おそらくこれは問題ではありません。

どのように解決するのですか?

画像ファイルのNSDataがあれば、1バイト目を見ればコンテンツタイプを推測することができます。

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