iOS中直接使用Gif圖片
今天有兩個朋友問我如何直接在iOS中使用GIF圖片,查了下咱們的度娘看到了簡單的方法就是直接使用webView來載入。webView的好處在於每個subFrame之間的delay可以按照圖片的設定顯示出來。
還有個辦法就是使用定時器模擬幀數,使用imageIO流來讀取GIF的data。
我也嘗試寫個Demo來顯示Gif
在demo中首先先分解出GIF的每個image,之後使用UIView動畫來重現效果,在這個中使用了1/100秒作為一針
主體程式碼如下:
github位置:點選開啟連結- (void)loadImageData { // 將所有的子幀動畫加入陣列 NSMutableArray *array = [[NSMutableArray alloc] init]; for (int i = 0; i < [GIF_frames count]; i++) { [array addObject: [self getFrameAsImageAtIndex:i]]; } NSMutableArray *overlayArray = [[NSMutableArray alloc] init]; UIImage *firstImage = [array objectAtIndex:0]; CGSize size = firstImage.size; CGRect rect = CGRectZero; rect.size = size; //獲取當前的上下文 UIGraphicsBeginImageContext(size); CGContextRef ctx = UIGraphicsGetCurrentContext(); int i = 0; AnimatedGifFrame *lastFrame = nil; for (UIImage *image in array) { // 獲取 AnimatedGifFrame *frame = [GIF_frames objectAtIndex:i]; //當前的展示 UIImage *previousCanvas = nil; //將當前圖形狀態推入堆疊 CGContextSaveGState(ctx); // 縮放比例(上下文,x的比例,y的比例(需使用負值),因為cgcontext的原點與uiview不同) CGContextScaleCTM(ctx, 1.0, -1.0); CGContextTranslateCTM(ctx, 0.0, -size.height); // 顯示的大小 CGRect clipRect; // 判斷是哪種顯示方法 switch (frame.disposalMethod) { case 1: // 是否超邊了 // 顯示的大小 clipRect = CGRectMake(frame.area.origin.x, size.height - frame.area.size.height - frame.area.origin.y, frame.area.size.width, frame.area.size.height); CGContextClipToRect(ctx, clipRect); break; case 2: clipRect = CGRectMake(frame.area.origin.x, size.height - frame.area.size.height - frame.area.origin.y, frame.area.size.width, frame.area.size.height); CGContextClipToRect(ctx, clipRect); break; case 3: // 獲取畫板 previousCanvas = UIGraphicsGetImageFromCurrentImageContext(); clipRect = CGRectMake(frame.area.origin.x, size.height - frame.area.size.height - frame.area.origin.y, frame.area.size.width, frame.area.size.height); // Clip Context CGContextClipToRect(ctx, clipRect); break; } // 繪製實際圖片實際大小 CGContextDrawImage(ctx, rect, image.CGImage); // 重新渲染 CGContextRestoreGState(ctx); //延遲時間要大於等於0 if (frame.delay <= 0) { frame.delay = 10; } [overlayArray addObject:UIGraphicsGetImageFromCurrentImageContext()]; // 設定最後顯示大小 lastFrame = frame; // switch (frame.disposalMethod) { case 2: CGContextSaveGState(ctx); CGContextScaleCTM(ctx, 1.0, -1.0); CGContextTranslateCTM(ctx, 0.0, -size.height); // 清除上下文 CGContextClearRect(ctx, clipRect); // 重設上下文 CGContextRestoreGState(ctx); break; case 3: CGContextSaveGState(ctx); CGContextScaleCTM(ctx, 1.0, -1.0); CGContextTranslateCTM(ctx, 0.0, -size.height); CGContextClearRect(ctx, lastFrame.area); CGContextDrawImage(ctx, rect, previousCanvas.CGImage); CGContextRestoreGState(ctx); break; } i++; } UIGraphicsEndImageContext(); [self setImage:[overlayArray objectAtIndex:0]]; [self setAnimationImages:overlayArray]; //gif總共播放時間 double total = 0; for (AnimatedGifFrame *frame in GIF_frames) { total += frame.delay; } // gif的針數大概為1/100一秒 // UIImage來播放 [self setAnimationDuration:total/100]; // 設定是否迴圈 [self setAnimationRepeatCount:0]; [self startAnimating]; }
裡面使用了很多c語言,主要就是拿來判斷是否為gif,和解析gif
相關推薦
iOS中直接使用Gif圖片
今天有兩個朋友問我如何直接在iOS中使用GIF圖片,查了下咱們的度娘看到了簡單的方法就是直接使用webView來載入。webView的好處在於每個subFrame之間的delay可以按照圖片的設定顯示出來。 還有個辦法就是使用定時器模擬幀數,使用imageIO流來讀取GIF
iOS開發技巧之:相簿中的GIF圖片的讀取與儲存
大家都知道iOS的系統相簿是不支援gif圖片預覽的。但是,這並不代表系統相簿不能儲存和讀取gif圖片。通過Safari長按gif圖片,選擇儲存到相簿,這時儲存到相簿裡的圖片就是gif的,雖然它不會動。 下面將介紹如何對系統相簿進行gif的讀取與儲存。 什麼是 UTI iOS系統相
MFC中新增GIF圖片
1、下載上述文章中的軟體包,將其中的PictureEx.h,PictureEx.cpp這兩個檔案新增到工程中。 2、在對話方塊控制元件上新增Picture Control(圖片控制元件),修改其屬性:ID(TYPE:選Rectangle),不修改的話,ClassWiard不能新增CSatic控制變數,修改
unity 中播放GIF圖片
using System.Drawing;using System.Drawing.Imaging;using UnityEngine;using System.Collections;using System.Collections.Generic;public class AnimatedGifDrawe
iOS中如何把圖片存放入SQLite資料庫
有時候我們需要把一些圖片檔案存放到本地,當然可以直接存入沙盒路徑下;這裡想到另外的方法,就是直接將圖片資料存到資料庫中(只是想實現一下,不是很方便,建議不要用,可以把圖片存入沙盒,然後把儲存路徑存入資料庫,這樣比較合理)。 這樣對於包含圖片資訊的列表形式的資料的儲存就方便多
PS中修改gif圖片遇到的問題
ps gif圖片 播放完了會閃一下? 檢查後發現最後多了幾個空白幀,刪除儲存就好了。 為什麼用PS做的GIF圖,預覽時候動,儲存成GIF的就不動了? 首先看你是不是設定了多個幀,其次要看你是不是每一幀都顯示的一個不同的圖層,如果這都沒有問題播放動畫看看是有是動
ios中播放gif動畫
轉自:http://blog.csdn.net/lovenjoe/article/details/7487142 iPhone SDK提供了多種動畫手段,UIView、UIImageView和CALayer都支援動畫。但如何處理常見的gif動畫呢?UIWebView提供了
如何在MySQL資料庫中直接儲存圖片
c 本文概述: 在mysql中建立一個新的資料庫 一個怎樣儲存檔案的例子程式 一個怎樣訪問檔案的例子程式 在mysql中建立一個新的database 首先,你必須在你的mysql中建立一個新的資料庫,我們將會把那些二進位制檔案儲存在這個資料庫裡。在例子中
LaTeX 中插入GIF圖片
參見博文:liam.page 和 voidcn 前提條件 安裝 ImageMagick 軟體 (因為要把 gif 圖片轉換成 png 序列),使用它的命令列工具 convert.exe 命令列下把 gif 轉換成 png 序列,實際,例如 convert latex_demo.gif -coalesce o
iOS中GIF圖片的載入
Gif圖片是非常常見的圖片格式,尤其是在聊天的過程中,Gif表情使用地很頻繁。但是iOS竟然沒有現成的支援載入和播放Gif的類。 簡單的上網搜了一下,大概有三種方法: 1、使用UIWebView // 讀取gif圖片資料 NSData *data = [NS
linux下,將一個目錄中的圖片文件合成為gif圖片
linux span depth 合成 linux下 bsp col spa 目錄 # {0} 為文件所在目錄位置 # {1} 為gif圖片位置 convert -delay 30 -depth 8 -layers optimize -quality 80 -loop 0
Android中Gif圖片的顯示
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
在markdown中直接插入base64編碼的圖片
經常寫一些東西,但是一直被如何分享與遷移這些東西困擾。比如從onenote和word沒辦法快速的釋出到csdn(本來有介面的,但是csdn現在不提供了)。釋出到csdn的內容不能直接完整的複製下來繼續編輯,格式會完全亂掉。 markdown是一個不錯的答案,以文字的方式表達格式,走到哪都
iOS開發技巧之:獲取ios相簿gif圖片 原資料
<AssetsLibrary/AssetsLibrary.h> 從Safari上儲存了一張動態GIF到本地的相簿中可以確定,儲存到本地相簿的動態GIF沒有問題,只是iPhone的相簿不能顯示動態GIF然後在自己的應用中,要可以選擇GIF圖片上傳到伺服器用UIImagePickerCo
IOS中各種圖片大小尺寸彙總
IOS中各種圖片大小尺寸彙總 Table 8-1 Size (in pixels) of custom icons and images
讓富文字編輯器支援複製doc中多張圖片直接貼上上傳
Chrome+IE預設支援貼上剪下板中的圖片,但是我要釋出的文章存在word裡面,圖片多達數十張,我總不能一張一張複製吧? 我希望開啟文件doc直接複製貼上到富文字編輯器,直接釋出 感覺這個似乎很困難,因為Ueditor本身不支援,粘貼後直接就是空白,這裡面一定有原因。 好,開始嘗試UM
Nginx設定Laravel專案中圖片防盜鏈以及禁止位址列直接訪問圖片
為了防止圖片盜用,禁止外鏈以及禁止位址列直接訪問圖片是必不可少的方案,當然這樣的限制還比較基礎,還是有別的途徑可以盜圖的,更多的限制之後會追加,現在先做好這兩個基礎防護。 location ~ .*\.
iOS view上直接新增圖片
UIImage*image = [UIImageimageNamed:@"bg"]; view.layer.contents = (__bridge id)image.CGImage; /** 設定對齊模式*/ view.layer.contentsGravity =
Python - pyecharts:直接將圖片儲存為 png, pdf, gif 格式的檔案
關鍵:使用 pyecharts-snapshot外掛 第一步:安裝node.js 第二步:安裝phantomjs 命令列中輸入: npm install -g phantomjs-prebuilt 安裝完成後檢查是否成功,命令列輸入: phantomjs 第三
IOS快速刪除專案工程中不用的圖片資源
在開發中,由於種種原因我們工程中必不可少的存在很多用不到的圖片資源,久而久之,使得工程的包檔案越來越大,如果一張張的查詢清理,這樣處理很麻煩,現在我推薦給大家一個方法,不到3分鐘,就能清理所有的用不到的圖片資源. 首先先去下載一個大牛寫的mac應用,執行開啟,傳送門. 1.開啟應用就會顯示這