iOS系統(tǒng)提供的UIImageView控件是不支持GIF的加載的,在APP開發(fā)中會(huì)使用到一些GIF圖片了讨,本文主要講解蘋果手機(jī)上GIF圖使用方法捻激,主要是基于SDWebImage框架。
一前计、界面顯示:
1.先集成SDWebImage及SDWebImage/GIF框架
pod 'SDWebImage'
pod 'SDWebImage/GIF'
2.使用SDWebImage/GIF框架提供的兼容GIF圖的控件FLAnimatedImageView
初始化
? ? ? ? _img = [[FLAnimatedImageView alloc] init];
? ? ? ? _img.contentMode = UIViewContentModeScaleAspectFill;
? ? ? ? _img.clipsToBounds = YES;
? ? ? ? _img.backgroundColor = ColorViewBack;
? ? ? ? [self.contentView addSubview:_img];
? ? ? ? [_img makeConstraints:^(MASConstraintMaker *make) {
? ? ? ? ? ? make.left.right.top.bottom.equalTo(self);
? ? ? ? }];
加載GIF圖
? ?[_img sd_setImageWithURL:[NSUrl urlWithStrint:@"http;xxxxxxx"]]?
該控件的使用方法與系統(tǒng)的UIImageView一樣胞谭。
二、上傳
上傳方法可以分為Base64和file方法男杈,本文主要介紹Base 64方法
//圖片文件轉(zhuǎn)化成Base64字符
+(NSString *)getGifBase64Str:(NSData *)data
{
? ? NSString *imageStyle = [self getImageStyle:data];
? ? NSString *str = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
? ? str = [NSString stringWithFormat:@"data:image/%@;base64,%@", imageStyle, str];
? ? return str;
}
//獲取圖片的格式
+(NSString *)getImageStyle:(NSData *)data
{
? ? uint8_t c;
? ? [data getBytes:&c length:1];
? ? switch (c) {
? ? ? ? case 0xFF:
? ? ? ? ? ? return @"jpeg";
? ? ? ? case 0x89:
? ? ? ? ? ? return @"png";
? ? ? ? case 0x47:
? ? ? ? ? ? return @"gif";
? ? ? ? case 0x49:
? ? ? ? case 0x4D:
? ? ? ? ? ? return @"tiff";
? ? ? ? case 0x52:
? ? ? ? ? ? if ([data length] < 12) {
? ? ? ? ? ? ? ? return nil;
? ? ? ? ? ? }
? ? ? ? ? ? NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
? ? ? ? ? ? if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
? ? ? ? ? ? ? ? return @"webp";
? ? ? ? ? ? }
? ? ? ? ? ? return nil;
? ? }
? ? return nil;
}
把這個(gè)轉(zhuǎn)化后的Base64字符串韭赘,當(dāng)成一個(gè)網(wǎng)絡(luò)請(qǐng)求的參數(shù),發(fā)起請(qǐng)求即可(要有post請(qǐng)求势就,Base64字符長(zhǎng)度較大泉瞻,get請(qǐng)求不支持)
三脉漏、保存到相冊(cè)
NSData *gifData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url] options:NSDataReadingUncached error:nil];
? ? ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
? ? NSDictionary *metadata = @{@"UTI":(__bridge NSString *)kUTTypeGIF};
? ? [library writeImageDataToSavedPhotosAlbum:gifData metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) {
? ? ? ? [self showAlert:@"保存成功" type:AlertViewType_Toast];
? ? }] ;
原文鏈接:https://blog.csdn.net/qq_30356665/java/article/details/88054049