画像バイナリデータ(NSData)から画像形式を判別
//NSDataを拡張
extension NSData {
func imageTypeForImageData() -> String? {
var c = [UInt32](count: 1, repeatedValue: 0)
self.getBytes(&c, length: 1)
switch (c[0]) {
case 0xFF:
return "jpeg"
case 0x89:
return "png"
case 0x47:
return "gif"
case 0x42:
return "bmp"
default:
return nil
}
}
}
画像ファイル名の拡張子から画像形式を判別
//NSURLを拡張
extension NSURL {
func imageTypeForExtention() -> String? {
let ext = self.pathExtension!.lowercaseString
switch ext {
case ".jpg" , ".jpeg":
return "jpeg"
case ".png":
return "png"
case ".gif":
return "gif"
case ".bmp":
return "bmp"
default:
return nil
}
}
}
例:Alamofireでmimetypeを指定して画像アップロードする
// imageData:NSData?
// fileUrl:NSURL?
// image:UIImage
Alamofire.upload(
.POST,
"https://httpbin.org/post",
multipartFormData: { multipartFormData in
if let imageType = imageData?.imageTypeForImageData() {
//バイナリから画像形式の判別
multipartFormData.appendBodyPart(data: imageData!, name: "file", fileName: "IMG."+imageType, mimeType: "image/"+imageType)
} else if let imageType = fileUrl?.imageTypeForExtention() {
//拡張子から画像形式の判別
multipartFormData.appendBodyPart(data: imageData!, name: "file", fileName: "IMG."+imageType, mimeType: "image/"+imageType)
} else {
// 判別できないものはJPEG形式の画像フォーマットとしてNSDataに変換
let data:NSData = UIImageJPEGRepresentation(image , 1.0)!
multipartFormData.appendBodyPart(data: data, name: "file", fileName: "IMG.jpg", mimeType: "image/jpeg")
}
},
encodingCompletion: { encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
}
case .Failure(let encodingError):
print(encodingError)
}
}
)
参考
Finding image type from NSData or UIImage
Path extension and MIME type of file in swift
Alamofire