實用小技巧(十八):取出gif圖的每一幀

版本記錄

版本號 時間
V1.0 2017.07.18

前言

在app中,有時候需要對gif圖進行編輯,但是在進行幀編輯的前提是首先要獲取到每一幀,這一篇就說一下方法。感興趣的可以看看我寫的其他小技巧。
1. 實用小技巧(一):UIScrollView中上下左右滾動方向的判斷

2. 實用小技巧(二):屏幕橫豎屏的判斷和相關邏輯
3.實用小技巧(三):點擊手勢屏蔽子視圖的響應
4.實用小技巧(四):動態(tài)的增刪標簽視圖
5.實用小技巧(五):通過相冊或者相機更改圖標
6.實用小技巧(六):打印ios里所有字體
7. 實用小技巧(七):UITableViewCell自適應行高的計算
8. 實用小技巧(八):數(shù)字余額顯示的分隔
9.實用小技巧(九):類頭條模糊背景的實現(xiàn)
10.實用小技巧(十):晃動手機換后臺服務器網(wǎng)絡
11.實用小技巧(十一):scrollView及其子類顯示的一些異常處理
12.實用小技巧(十二):頭像圖片縮放以及保存到相冊簡單功能的實現(xiàn)
13.實用小技巧(十三):一種類酷我音樂盒動畫實現(xiàn)
14.實用小技巧(十四):生成跳往applestore指定app的方法
15.實用小技巧(十五):左側向右滑動返回上一級控制器
16.實用小技巧(十六):獲取設備信息
17.實用小技巧(十七):清除緩存目錄

功能需求

??在app中,有時候需要對gif圖進行編輯,但是在進行幀編輯的前提是首先要獲取到每一幀,下面我們就說一種取出gif圖中每一幀的方法,我們首先給出一個gif圖。

gif圖

功能實現(xiàn)

下面我們就直接看代碼吧。

#import "JJGifVC.h"
#include <ImageIO/ImageIOBase.h>
#include <ImageIO/CGImageSource.h>

@interface JJGifVC ()

@property (nonatomic, strong) NSArray <UIImage *> *imageArr;

@end

@implementation JJGifVC

#pragma mark - Override Base Function

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor lightGrayColor];
    
    self.imageArr = [self loadGifImageArr];
    
    [self setupUI];
}

#pragma mark - Object Private Function

- (void)setupUI
{
    UIImageView *coverImageView = [[UIImageView alloc] init];
    coverImageView.layer.borderColor = [UIColor blueColor].CGColor;
    coverImageView.layer.borderWidth = 1.0;
    coverImageView.clipsToBounds = YES;
    coverImageView.contentMode = UIViewContentModeScaleAspectFill;
    coverImageView.frame = CGRectMake(30.0, 100.0, 200, 200);
    [self.view addSubview:coverImageView];
    
    __weak typeof(self) weakSelf = self;
    NSInteger __block index = 0;
    NSTimer *timer = [NSTimer timerWithTimeInterval:0.8 repeats:YES block:^(NSTimer * _Nonnull timer) {
        __strong typeof(weakSelf) strongSelf = weakSelf;
        
        if (index < strongSelf.imageArr.count) {
            coverImageView.image = strongSelf.imageArr[index];
            index ++;
        }
        else {
            [timer invalidate];
            timer = nil;
        }
    }];
    
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}

- (NSArray *)loadGifImageArr
{
    NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"gif" withExtension:@"gif"];
    
    CGImageSourceRef gifSource = CGImageSourceCreateWithURL((CFURLRef)fileUrl, NULL);
    size_t gifCount = CGImageSourceGetCount(gifSource);
    NSMutableArray *frames = [[NSMutableArray alloc]init];
    for (size_t i = 0; i< gifCount; i++) {
        CGImageRef imageRef = CGImageSourceCreateImageAtIndex(gifSource, i, NULL);
        UIImage *image = [UIImage imageWithCGImage:imageRef];
        [frames addObject:image];
        CGImageRelease(imageRef);
    }
    return frames;
}

@end

這里我取出來gif的每一幀,然后給UIImageView賦上去,每隔0.8s更新一張,并做了防止數(shù)組越界和銷毀定時器等功能。


效果實現(xiàn)

下面我們就看一下效果圖。

靜態(tài)效果圖
gif動態(tài)效果圖

可以看見,已經(jīng)成功的取出來每一幀,并顯示了出來。

后記

未完,待續(xù)~~~~~

花與冬
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 某日,微信里看到朋友發(fā)了一個精致的小禮盒,藍底碎花,像小姑娘嬌羞的笑,恬淡,靜約,怎么看怎么愛。細看,內(nèi)有酥餅,問...
    F風荷閱讀 468評論 0 2
  • 讀完梁實秋先生的《人間有味是清歡》,對生活有了更深刻的認知,亦如梁實秋先生美學五部曲的書名,閑暇處才是生活,人間有...
    Erin棋落閱讀 923評論 0 4
  • 01 她是一個聰明的女生,一路總是順水順風。 從小記憶力超群,整本書都能刻在腦子里,即使高考發(fā)揮不佳,照常能上98...
    麥單閱讀 278評論 0 0
  • 姓名格局數(shù)理中蘊藏人生玄機 中國的五行學說, 也是宇宙根本規(guī)律之一。 五行元素,存在于自然和社會一切事物中。 也包...
    古中醫(yī)調理館閱讀 4,516評論 0 1