You can check in the project https://github.com/bonyadmitr/ImageFormat
Add to project
import Foundation /// can be done "heic", "heix", "hevc", "hevx" enum ImageFormat: String { case png, jpg, gif, tiff, webp, heic, unknown } extension ImageFormat { static func get(from data: Data) -> ImageFormat { switch data[0] { case 0x89: return .png case 0xFF: return .jpg case 0x47: return .gif case 0x49, 0x4D: return .tiff case 0x52 where data.count >= 12: let subdata = data[0...11] if let dataString = String(data: subdata, encoding: .ascii), dataString.hasPrefix("RIFF"), dataString.hasSuffix("WEBP") { return .webp } case 0x00 where data.count >= 12 : let subdata = data[8...11] if let dataString = String(data: subdata, encoding: .ascii), Set(["heic", "heix", "hevc", "hevx"]).contains(dataString) ///OLD: "ftypheic", "ftypheix", "ftyphevc", "ftyphevx" { return .heic } default: break } return .unknown } var contentType: String { return "image/\(rawValue)" } }
Using
for file in ["1.jpg", "2.png", "3.gif", "4.svg", "5.TIF", "6.webp", "7.HEIC"] { if let data = Data(bundleFileName: file) { print(file, ImageFormat.get(from: data)) } } /// Result /// 1.jpg jpg /// 2.png png /// 3.gif gif /// 4.svg unknown /// 5.TIF tiff /// 6.webp webp /// 7.HEIC heic
source share