Swift库:如何将动画Gif UIImage转换为Alamofire的NSData?

Swift库:如何将动画Gif UIImage转换为Alamofire的NSData?,swift,swift2,nsdata,gif,alamofire,Swift,Swift2,Nsdata,Gif,Alamofire,我正在使用阿拉莫菲尔上传文件。可以使用UIImage[jpeg | png]Representation()处理jpeg和png图像,但如何将动画gif文件转换为NSData 我尝试了animatedgimagerialization,但它太旧了,无法工作。 如何将动画Gif UIImage转换为Alamofire的NSData func uploadFile() { if let fileURL = NSBundle.mainBundle().URLForResource("Aari

我正在使用阿拉莫菲尔上传文件。可以使用UIImage[jpeg | png]Representation()处理jpeg和png图像,但如何将动画gif文件转换为NSData

我尝试了
animatedgimagerialization
,但它太旧了,无法工作。 如何将动画Gif UIImage转换为Alamofire的NSData

 func uploadFile() {
    if let fileURL = NSBundle.mainBundle().URLForResource("AarioAi", withExtension: "jpeg"){
        var imageData : NSData? = nil
        if let image = UIImage(named: "loading2.gif") {
            let filetype = "gif"
            switch filetype {
            case "jpeg", "jpg":
                imageData = UIImageJPEGRepresentation(image, 1.0)
            case "gif":
                imageData = UIImagePNGRepresentation(image)
            case "png":
                imageData = UIImagePNGRepresentation(image)
            default:
                imageData = UIImagePNGRepresentation(image)
            }
        }

    Alamofire.upload(.POST, Conf.URL.uploadFile, multipartFormData: {
        // POST file[]=xxxx&&file[]=xxxxx
        multipartFormData in
        multipartFormData.appendBodyPart(fileURL: fileURL, name: "file[]")
        multipartFormData.appendBodyPart(data: imageData!, name: "file[]", fileName: "loading2.gif", mimeType: "image/gif")

        },
        encodingCompletion: {
            encodingResult in
            switch encodingResult {
            case .Success(let upload, _, _):
                upload.responseJSON { response in
                    debugPrint(response)
                }
            case .Failure(let encodingError):
                print(encodingError)
            }
    })
    }
}

关键是首先不要从文件中生成UIImage。当您编写这样的代码时:

UIImage(named: "loading2.gif")
您正在将文件解码为可在屏幕上显示的格式。此外,UIImage只能表示GIF的单个帧。即使对于JPEG,它看起来是有效的,您也会丢失所有元数据,并且可能会因为重新编码而丢失质量。更不用说,解码和重新编码要比直接发送文件慢得多

不要这样做,只需按照以下说明将文件内容直接加载到NSData对象中:


关键是首先不要从文件中生成UIImage。当您编写这样的代码时:

UIImage(named: "loading2.gif")
您正在将文件解码为可在屏幕上显示的格式。此外,UIImage只能表示GIF的单个帧。即使对于JPEG,它看起来是有效的,您也会丢失所有元数据,并且可能会因为重新编码而丢失质量。更不用说,解码和重新编码要比直接发送文件慢得多

不要这样做,只需按照以下说明将文件内容直接加载到NSData对象中:

你可以查看这篇文章。你可以看看这篇文章。