2016-07-07 23 views
1

In meiner iOS-Anwendung möchte ich ein Gif-Bild in meiner tableViewCell anzeigen. Laden Sie dieses gif-Bild von SDWebImage herunter, und verwenden Sie FLAnimatedImageView, um dieses Bild anzuzeigen.Wie Bilder von Gif-Bild in NSData für iOS konvertieren?

Aber jetzt habe ich ein Problem, SDWebImage eine Bilder zurückgeben, aber die FLAnimatedImageView wollen eine NSData.

Wie man Bilder von gif-NSData konvertieren?

mein schlechtes Englisch Verzeihen.

[[SDWebImageManager sharedManager] downloadImageWithURL:url options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { 
      if (image.images.count > 0)//gif 
      { 
       // how to get the data 
       FLAnimatedImage *animatedImage = [FLAnimatedImage animatedImageWithGIFData:data]; 
       _chatGIFImage.animatedImage = animatedImage1; 
      } 

     }]; 
+0

Sie können gif Bild direkt mit SDwebimage lib –

+1

verwenden Ich habe festgestellt, dass "UIImage + GIF.h" eine Methode hat: "+ (UIImage *) sd_animatedGIFWithData: (NSData *) Daten;" Wie bekomme ich eine umgekehrte Methode? konvertiere das gif-Bild in NSData. – Maker

+0

@Jigar Tarsariya Ich habe bereits SDwebimage verwendet, um gif Bild anzuzeigen, aber es hat riesige Speicherlecks, zwei 2M gif Bilder können 200M Speicherlecks online bringen, Anwendung Absturz leicht, ich denke, mein glückliches Leben wird nicht länger sein, wird mein Chef bestrafen mich ./ (ㄒ o ㄒ)/~~ – Maker

Antwort

1

Wenn Sie die URL des Bildes haben Sie direkt die folgenden Befehle verwenden kann es zu NSData konvertieren

NSData *data = [NSData dataWithContentsOfURL: imageURL]; 
+1

'dataWithContentsOfURL' den Thread, auf dem es aufgerufen wird, blockieren, da dies eine synchrone Methode ist. Sie sollten dies nicht im Hauptthread aufrufen, da dies die App für einige Sekunden in einem langsamen Netzwerk blockiert. – UditS

0

Sie können wie unten etwas tun:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

    NSError* error = nil; 
    NSData* ImageData = [NSData dataWithContentsOfURL:yourIMGUrl options:NSDataReadingUncached error:&error]; 
    if (error) { 

     NSLog(@"%@", [error localizedDescription]); 

    } else { 

     NSLog(@"successfull."); 

     dispatch_sync(dispatch_get_main_queue(), ^{ 

      FLAnimatedImage *animatedImage = [FLAnimatedImage animatedImageWithGIFData:ImageData]; 
      _chatGIFImage.animatedImage = animatedImage1; 

     }); 
    } 


}); 
0

können Sie einfach Verwenden Sie

// UIImageJPEGRepresentation(<#UIImage * _Nonnull image#>, <#CGFloat compressionQuality#>) 
NSData *data = UIImageJPEGRepresentation(image, 1.0); 

Komprimierung Qualität kann zwischen 0,0 (hohe Komprimierung, geringe Qualität) und 1,0 (niedrige Komprimierung, hohe Qualität) sein

+0

Dies ruft NSData in einem GIF-Format nicht zur Verwendung mit FLAnimatedImage ab. – Maple