LoginSignup
3
4

More than 3 years have passed since last update.

画像ファイルの種類を判別するDataのExtension

Posted at

Swiftでファイルを取扱う際、URLであればpathExtensionで拡張子を取得することができます。しかしDataからファイルの種類を特定する場合、基本機能だけでは不可能です。NSDataから判別する記事を書いている方がいたので、これを元にDataから画像の種別を特定するExtensionを作成しました。

コード全貌 (+解説)

extension Data {
    enum ImageType: String, CaseIterable {
        case jpg
        case png
        case gif
        case bmp

        var header: UInt8 {
            switch self {
            case .jpg:
                return 0xff

            case .png:
                return 0x89

            case .gif:
                return 0x47

            case .bmp:
                return 0x42
            }
        }

        var `extension`: String {
            return "." + rawValue
        }
    }

    var imageType: ImageType? {
        var values = [UInt8](repeating: 0, count: 1)
        copyBytes(to: &values, count: 1)
        return ImageType.allCases.first { $0.header == values[0] }
    }
}

画像ファイルの種別はバイナリデータのヘッダを見ればわかる(らしい)ので、その情報を持つenum ImageTypeを定義しておき、var imageType内で実際のヘッダとの比較を行っています。判別する画像の種類を増やしたいときはenum ImageTypecaseを追加すればよいです。楽ですね。

まとめ

正直バイナリとか触ったことなくて不安しかないので、間違い等あればご指摘お願いします...

参考文献

3
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4