私は自分のサーバーに画像をアップロードしようとしていますが、アップロードする前に有効な形式かどうかを確認する必要があります。すぐにUIImageからイメージの拡張子/フォーマットを取得する方法
私はただ.jpegと.pngだけを望んでいるとしましょう。ユーザーが携帯電話から.gif形式の画像を選択した場合、警告が表示されます。
私は、ユーザーギャラリー/カメラから画像を取得し、その後、私はフォーマットを確認したいが、私は形式を確認する方法がわからない
@IBAction func selectPictureButtonDidPressed(_ sender: Any) {
let imagePickerController = UIImagePickerController()
imagePickerController.delegate = self
imagePickerController.allowsEditing = true
let actionSheet = UIAlertController(title: "Photo Source", message: "please choose your source", preferredStyle: .actionSheet)
// action camera
let actionCamera = UIAlertAction(title: "Camera", style: .default) { (action) in
if UIImagePickerController.isSourceTypeAvailable(.camera) {
imagePickerController.sourceType = .camera
self.present(imagePickerController, animated: true, completion: nil)
} else {
self.showAlert(alertTitle: "Opppss", alertMessage: "camera can't be used/not available", actionTitle: "OK")
print("camera can't be used/not available")
}
}
// action photo library
let actionPhotoLibrary = UIAlertAction(title: "Photo Library", style: .default) { (action) in
imagePickerController.sourceType = .photoLibrary
self.present(imagePickerController, animated: true, completion: nil)
}
//action cancel
let actionCancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
actionSheet.addAction(actionCamera)
actionSheet.addAction(actionPhotoLibrary)
actionSheet.addAction(actionCancel)
self.present(actionSheet, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
postImage.image = image
picker.dismiss(animated: true, completion: nil)
doesItHasImage = true
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
}
は、どのように私はその形式をチェックしますか?
私はgoogleで見つけようとしましたが、URLから派生した画像フォーマットを取得しました。直接ではなく、おそらくUIImagePNGRepresentation()またはUIImageJPEGRepresentation()を使用して、生のデータに画像をカバーする必要があり、この
import UIKit
import ImageIO
struct ImageHeaderData{
static var PNG: [UInt8] = [0x89]
static var JPEG: [UInt8] = [0xFF]
static var GIF: [UInt8] = [0x47]
static var TIFF_01: [UInt8] = [0x49]
static var TIFF_02: [UInt8] = [0x4D]
}
enum ImageFormat{
case Unknown, PNG, JPEG, GIF, TIFF
}
extension NSData{
var imageFormat: ImageFormat{
var buffer = [UInt8](repeating: 0, count: 1)
self.getBytes(&buffer, range: NSRange(location: 0,length: 1))
if buffer == ImageHeaderData.PNG
{
return .PNG
} else if buffer == ImageHeaderData.JPEG
{
return .JPEG
} else if buffer == ImageHeaderData.GIF
{
return .GIF
} else if buffer == ImageHeaderData.TIFF_01 || buffer == ImageHeaderData.TIFF_02{
return .TIFF
} else{
return .Unknown
}
}
}
// USAGE
let imageURLFromParse = NSURL(string : "https://i.stack.imgur.com/R64uj.jpg")
let imageData = NSData(contentsOf: imageURLFromParse! as URL)
print(imageData!.imageFormat)
を試すことができます。まずは 'URL'を使って始めましょう。 NSDataの場合も同様です。ちょうど 'データ'を使用してください。 – rmaddy
あなたが投稿したコードは、 'UIImage'(型を持たない)からイメージの型を決定しようとしていません。 – rmaddy
UIImageからのファイル拡張子を確認できない場合は、画像形式を確認する方法はありますか? – Alexa289