如何在swift中从UIImage获取图像扩展/格式

Ale*_*289 2 uiimage ios swift

我正在尝试将图像上传到我的服务器,但在上传之前,我需要检查它是否是有效的格式.

假设我只想要.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)
    }
Run Code Online (Sandbox Code Playgroud)

我该如何检查该格式?

我试图在谷歌上找到,但我只是得到图像格式,如果它是从URL派生的.不是直接来自UIImage这样的

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)
Run Code Online (Sandbox Code Playgroud)

iOS*_*eek 7

你可以试试这个

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
    let assetPath = info[UIImagePickerControllerReferenceURL] as! NSURL
    if (assetPath.absoluteString?.hasSuffix("JPG"))! {
        print("JPG")
    }
    else if (assetPath.absoluteString?.hasSuffix("PNG"))! {
        print("PNG")
    }
    else if (assetPath.absoluteString?.hasSuffix("GIF"))! {
        print("GIF")
    }
    else {
        print("Unknown")
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果用户从相机中选取了图像怎么办?对于相机输入,应用程序将在“ info [UIImagePickerControllerReferenceURL]上以NSURL崩溃” (2认同)