iOS应用中的APNG

14

我可能会因此受到批评。

我想知道是否有任何方式可以在iPhone应用程序中加载APNG(动画PNG)?

我不是说将多个PNG图像添加为UIImageViewNSArray,我已经可以使用这种方法,但这需要多个PNG图像。

我指的是一种特殊的PNG格式,称为APNG (http://en.wikipedia.org/wiki/APNG),它只包含1个PNG文件,但具有动画元数据。

我发现了这个名为AVAnimator的库:http://www.modejong.com/AVAnimator/index.html,据说可以加载APNG格式,但许可证费用为475美元,而该库似乎来自几年前(iOS 4)。

我还读到说,Apple iOS 8 Safari以及Yosemite Safari内置支持APNG。

我真的不想使用UIWebView来显示APNG文件。它能够工作,我已经测试过了,但我认为那不是理想的选择。

我希望有一些未被发现的新的iOS SDK可以让我们加载APNG到应用程序中,我可能不知道,也许你们知道。

Line应用程序(http://line.me/en/)是如何做到的?他们似乎对他们的“贴纸”使用了动画PNG。


1
我没有使用APNG,但如果要求不是那么严格,我会选择GIF并使用https://github.com/Flipboard/FLAnimatedImage。 - turbo
@turbo,我也找到了那个库,目前它支持GIF格式,但待办事项之一是添加APNG和WebP支持。祈祷成功 :) - Zhang
1
请参考 https://stackoverflow.com/questions/25074340/avanimator-mvid-conversion/25478854#25478854 获取完整解决方案。 - MoDJ
目前iOS原生不支持APNG格式,但你可以使用第三方库,例如https://github.com/onevcat/APNGKit或https://github.com/ibireme/YYImage。 - Cœur
3个回答

6

我刚刚发布了一个用于在iOS中加载和显示APNG文件的框架。

您可以使用该框架,按照UIImageUIImageView的相同模式加载APNG图像,如下所示:

let image = APNGImage(name: "your_apng_image")
let imageView = APNGImageView(image: image)

imageView.startAnimating()

view.addSubview(imageView)

更多信息,请访问这里:https://github.com/onevcat/APNGKit


1
仅仅链接到你自己的库并不是一个好的答案。链接到它,解释为什么它能解决问题,提供使用该库的代码,并声明你并非作者,这将构成一个更好的答案。参考:什么是“好”的自我推广? - durron597
你有关于Objective C的任何想法吗? - Nam Vu
我需要尽快使用这个库,你能否把它转换成Swift 3?我已经使用ImageIO成功将动画保存为APNG格式,但是需要你的库来将其加载到UIImage数组中。https://github.com/radif/MSSticker-Images/blob/master/Classes/mcbAnimatedImagePersister.m - Radif Sharafullin
你的APNGKit看起来很棒。抱歉回复晚了,我今晚回家后会测试这个解决方案。 - Zhang
1
哇塞,它能用了 o.O 唯一的问题是当我自动布局imageView时,似乎需要指定宽度和高度,否则如果我只告诉它在视图控制器的中心X/Y上居中,imageView就不会出现。非常感谢您制作这个库 :D - Zhang
@onevcat 在我的情况下它很卡顿。你能提供一些技巧吗?我的设备是XR,它的内存很充足且空闲。 - Chetan Prajapati

3

这个真的没有文档,但它应该在ImageIO框架中的某个地方。

我可以在CGImageProperties.h中看到一些APNG字符串。


不,ImageIO 不支持 APNG 格式。它支持动画 GIF,但不支持 APNG。 - MoDJ
3
我成功地使用ImageIO将动画保存为APNG格式,但不确定如何将其加载到UIImage数组中:https://github.com/radif/MSSticker-Images/blob/master/Classes/mcbAnimatedImagePersister.m - Radif Sharafullin
我们警告这些无法保存到照片库。 - jjxtra

3

如果我需要从服务器下载APNG,然后加载到Stickerview中怎么办?那个例子仅展示如何使用APNG或PNG制作贴纸。 - Muhammad Shauket

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接