2016-03-23 102 views
1

我正在使用Alamofire來上傳文件。用UIImage [JPEG | PNG] Representation()處理jpeg和png圖像是可以的,但是如何將動畫gif文件轉換爲NSData?我試過AnimatedGIFImageSerialization但它太舊了,不起作用。 如何將動畫的Gif UIImage轉換爲Alamofire的NSData?Swift Library:如何將動畫Gif UIImage轉換爲NSData for Alamofire?

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) 
      } 
    }) 
    } 
} 
+0

你可以看看這個帖子。 http://stackoverflow.com/questions/16748355/convert-gif-image-to-nsdata – TangZijian

回答

0

關鍵是首先不要從文件中創建UIImage。當你這樣寫代碼時:

UIImage(named: "loading2.gif") 

你正在將文件解碼成可以在屏幕上顯示的格式。另外,UIImage只能表示GIF的單個幀。即使對於JPEG,它看起來很有用,但你正在丟失所有的元數據,並可能因重新編碼而失去質量。更不用說,解碼和重新編碼要比直接發送文件慢很多。

而是這樣做的,只是直接加載文件內容到一個NSData對象按照這裏的說明:

Convert Gif image to NSData