2016-07-07 1 views
1

В моем приложении iOS я хочу показать изображение Gif в моем tableViewCell. Загрузите этот образ Gif на SDWebImage и используйте FLAnimatedImageView, чтобы показать это изображение.Как конвертировать изображения gif-изображения в NSData для iOS?

Но теперь у меня есть проблема, SDWebImage вернуть изображения, но FLAnimatedImageView хочу NSData.

Как конвертировать изображения в gifNSData?

Простите мой бедный английский.

[[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

Вы можете напрямую использовать gif-изображение с помощью SDwebimage lib –

+1

Я обнаружил, что «UIImage + GIF.h» имеет метод: "+ (UIImage *) sd_animatedGIFWithData: (NSData *) данные;" Как получить обратный метод? конвертировать gif изображение в NSData. – Maker

+0

@Jigar Tarsariya Я уже использовал SDwebimage для отображения gif-изображения, но у него огромные утечки памяти, два снимка 2M gif могут принести утечки памяти 200M в Интернете, крах приложения легко, я думаю, что моя счастливая жизнь не будет длинной, мой босс будет наказывать me ./ (ㄒ o ㄒ)/~~ – Maker

ответ

1

Если у вас есть URL изображения можно непосредственно использовать следующее для преобразования его в NSData

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

'dataWithContentsOfURL' будет блокировать поток, на который он вызывается, поскольку это синхронный метод. Вы не должны называть это в основном потоке, так как он блокирует приложение в течение десятков секунд в медленной сети. – UditS

0

Вы можете сделать что-то, как показано ниже:

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

Вы можете просто использование

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

Сжатие качество может быть между 0,0 (высокое сжатие, низкое качество) и 1,0 (низкое сжатие, высокое качество)

+0

Это не дает NSData в формате GIF для использования с FLAnimatedImage. – Maple

Смежные вопросы