-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathMimeType.swift
40 lines (34 loc) · 1.04 KB
/
MimeType.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import Foundation
import MobileCoreServices
extension Data {
internal var imageMime: String? {
let start = (self as NSData).bytes.bindMemory(to: UInt8.self, capacity: self.count)
guard let byte: UInt8 = UnsafeBufferPointer(start: start, count: 1).first else { return nil }
switch byte {
case 0xFF:
return mimeType(uti: kUTTypeJPEG)
case 0x89:
return mimeType(uti: kUTTypePNG)
case 0x47:
return mimeType(uti: kUTTypeGIF)
default:
return nil
}
}
}
extension URL {
internal var imageMime: String? {
return mimeType(extension: self.pathExtension, where: kUTTypeImage)
}
}
private func mimeType(extension: String, where: CFString? = nil) -> String? {
let uti = UTTypeCreatePreferredIdentifierForTag(
kUTTagClassFilenameExtension,
`extension` as CFString,
`where`
)?.takeRetainedValue()
return uti.flatMap(mimeType(uti:))
}
private func mimeType(uti: CFString) -> String? {
return UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() as String?
}