问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

iOS 中对 GIF 的裁剪与展示

发布网友 发布时间:2022-11-17 23:02

我来回答

1个回答

热心网友 时间:2024-01-24 01:47

GIF 裁剪过程可以大致分为三步

这里主要用到了 Image I/O 的相关接口,Image I/O framework 提供一种不透明的数据类型(opaque data types),从 CGImageSourceRef 获取图片数据,将图片数据写入到 CGImageDestinationRef。它提供一个范围很广的图片格式,包含 web 格式,动态图,原始相机数据等。

首先是获取 GIF 的帧集合。

这里 CGImageSourceRef 就是一个代表图片的不透明的数据类型,它抽象了读取图像数据的通道,但本身不会读取图像的任何数据。

对于 GIF 等 AnimateImage 对象可以包含多个 Image,这里 CGImageSourceGetCount 就可以获取到对应的源图片数据的帧数。

GIF 的一个重要属性是它的 ration 值,这里简单取为帧数的 10%,相当于每一帧的 ration 是 0.1s。SDWebImage 库的 SDWebImageGIFCoder.m 文件中提供了一种更准确的获取方法

通过 CGImageSourceCreateImageAtIndex 方法我们可以从一个 CGImageSourceRef 数据源中读到一个帧位的未解码图片数据,然后通过 CGImageCreateWithImageInRect 对这一帧数据进行裁剪后,解码生成一个 UIImage 对象,将其放入一个数组中。最后通过 [UIImage animatedImageWithImages: ration:] 方法来生成一个被裁剪后的 GIF 的 UIImage 对象。这时候 可以把这个 UIImage 对象赋给 UIImageView 对象来展示一个 GIF 图片

最后要注意手动释放 CGImageSourceRef 对象

如果要传输裁剪后的 GIF 图片给服务器,还需要将上一步得到的 UIImage 转化为 NSData 对象。

这里通过上一步得到的 UIImage 对象,首先获得 GIF 图的帧数,然后获得每一帧的 ration。同时创建一个 NSMutableData 的对象用于存储 GIF 图片的数据,然后创建一个 CGImageDestinationRef 来指定存入数据区(mutableData)、存入数据类型(kUTTypeGIF)和帧数(frameCount)。最后遍历 animatedImage 的每一个 UIImage 对象,依据每一帧的 ration 值存入 CGImageDestinationRef 对象中。执行完遍历操作后,mutableData 中就是我们需要的裁剪后的 GIF 图片的 NSData 数据。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 山东菏泽到甘肃庆阳国道收过路费吗 北京劝返开州需要收过路费吗 五一假期高速收私家小车过路费吗? 2019年五一高速双排工具车收过路费吗? 在学校里遇到紧急情况怎么办 电脑突然死机原因 男人说电话号码你给不给怎么回答他? 大学生都可以考哪些证书 商标怎么申请商标注册证 魅族18s是双扬声器吗 郑州哪里有摩飞小家电的体验店? 依克多因护肤品什么档次 垃圾分类怎么做 垃圾分类的教程 腓特烈一世是如何建立普鲁士王国的?在建立普鲁士的过程中遇到了哪些困... 红胡子大帝是那个国家的统治者,叫什么? 如何按要求垃圾分类 需要怎么做 2个月泰迪身上痒老是咬腿咋回事 我和爸妈是朋友佳句 现在住23楼的,信号很差很差,接电话都是问题,朋友说打我电话,老是无法接... 只做最好的产品 魅航mehome行车记录仪评测 用三支中性笔一个纸箱子可以做什么 在广东省东莞哪里的工作最好找,工业区最多? 东莞去哪找工作好 东莞虎门哪里有电子厂招聘? 东莞长安,虎门,那个地方好找工作? 瑞迪柯拖鞋是哪里生产的 OPPOR11SPLUS怎么设置全民K歌耳返功能? 六年级作文:感谢母校600字 我想问一下低马尾发尾烫什么卷好看? 苹果的英语怎么念呢 IPOD的读音是不是和APPLE一样啊. 为什么叫ipod呢?读音是apple吗? 中国大老板银行欠款几千万上亿,为什么看起来还那么潇洒? 英文单词苹果怎么读呢 法院起诉书怎么写模板 ...家庭院里挂着的那件资质不同的人看到花纹也不同的和服? 思卡帕莫吉托岩石版什么意思 签了合同不让你上班让你等着 如果第九行星真的存在,它会是什么样子的? 签了劳动合同不想干了有工资吗 请问签了劳动合同 但是因为一些原因没去上班 请问还有工资吗?