当前位置: 首页 > 软件库 > iOS代码库 > 图像(Image) >

YYImage

iOS 图像框架
授权协议 MIT
开发语言 Objective-C
所属分类 iOS代码库、 图像(Image)
软件类型 开源软件
地区 国产
投 递 者 严亦
操作系统 iOS
开源组织
适用人群 未知
 软件概览

YYimage 是一个用于显示/编码/解码动画 WebP、APNG、GIF 等的 iOS 图像框架。

特性

  • 支持以下类型动画图像的播放/编码/解码:
        WebP, APNG, GIF。
  • 支持以下类型静态图像的显示/编码/解码:
        WebP, PNG, GIF, JPEG, JP2, TIFF, BMP, ICO, ICNS。
  • 支持以下类型图片的渐进式/逐行扫描/隔行扫描解码:
        PNG, GIF, JPEG, BMP。
  • 支持多张图片构成的帧动画播放,支持单张图片的 sprite sheet 动画。
  • 高效的动态内存缓存管理,以保证高性能低内存的动画播放。
  • 完全兼容 UIImage 和 UIImageView,使用方便。
  • 保留可扩展的接口,以支持自定义动画。
  • 每个类和方法都有完善的文档注释。

显示动画类型的图片

// 文件: ani@3x.gif
UIImage *image = [YYImage imageNamed:@"ani.gif"];
UIImageView *imageView = [[YYAnimatedImageView alloc] initWithImage:image];
[self.view addSubview:imageView];

播放帧动画

// 文件: frame1.png, frame2.png, frame3.png
NSArray *paths = @[@"/ani/frame1.png", @"/ani/frame2.png", @"/ani/frame3.png"];
NSArray *times = @[@0.1, @0.2, @0.1];
UIImage *image = [YYFrameImage alloc] initWithImagePaths:paths frameDurations:times repeats:YES];
UIImageView *imageView = [YYAnimatedImageView alloc] initWithImage:image];
[self.view addSubview:imageView];

播放 sprite sheet 动画

// 8 * 12 sprites in a single sheet image
UIImage *spriteSheet = [UIImage imageNamed:@"sprite-sheet"];
NSMutableArray *contentRects = [NSMutableArray new];
NSMutableArray *durations = [NSMutableArray new];
for (int j = 0; j < 12; j++) {
   for (int i = 0; i < 8; i++) {
       CGRect rect;
       rect.size = CGSizeMake(img.size.width / 8, img.size.height / 12);
       rect.origin.x = img.size.width / 8 * i;
       rect.origin.y = img.size.height / 12 * j;
       [contentRects addObject:[NSValue valueWithCGRect:rect]];
       [durations addObject:@(1 / 60.0)];
   }
}
YYSpriteSheetImage *sprite;
sprite = [[YYSpriteSheetImage alloc] initWithSpriteSheetImage:img
                                                contentRects:contentRects
                                              frameDurations:durations
                                                   loopCount:0];
YYAnimatedImageView *imageView = [YYAnimatedImageView new];
imageView.size = CGSizeMake(img.size.width / 8, img.size.height / 12);
imageView.image = sprite;
[self.view addSubview:imageView];

动画播放控制

YYAnimatedImageView *imageView = ...;
// 暂停:
[imageView stopAnimating];
// 播放:
[imageView startAnimating];
// 设置播放进度:
imageView.currentAnimatedImageIndex = 12;
// 获取播放状态:
image.currentIsPlayingAnimation;
//上面两个属性都支持 KVO。

图片解码

// 解码单帧图片:
NSData *data = [NSData dataWithContentsOfFile:@"/tmp/image.webp"];
YYImageDecoder *decoder = [YYImageDecoder decoderWithData:data scale:2.0];
UIImage image = [decoder frameAtIndex:0 decodeForDisplay:YES].image;
	
// 渐进式图片解码 (可用于图片下载显示):
NSMutableData *data = [NSMutableData new];
YYImageDecoder *decoder = [[YYImageDecoder alloc] initWithScale:2.0];
while(newDataArrived) {
   [data appendData:newData];
   [decoder updateData:data final:NO];
   if (decoder.frameCount > 0) {
       UIImage image = [decoder frameAtIndex:0 decodeForDisplay:YES].image;
       // progressive display...
   }
}
[decoder updateData:data final:YES];
UIImage image = [decoder frameAtIndex:0 decodeForDisplay:YES].image;
// final display...

图片编码

// 编码静态图 (支持各种常见图片格式):
YYImageEncoder *jpegEncoder = [[YYImageEncoder alloc] initWithType:YYImageTypeJPEG];
jpegEncoder.quality = 0.9;
[jpegEncoder addImage:image duration:0];
NSData jpegData = [jpegEncoder encode];
 
// 编码动态图 (支持 GIF/APNG/WebP):
YYImageEncoder *webpEncoder = [[YYImageEncoder alloc] initWithType:YYImageTypeWebP];
webpEncoder.loopCount = 5;
[webpEncoder addImage:image0 duration:0.1];
[webpEncoder addImage:image1 duration:0.15];
[webpEncoder addImage:image2 duration:0.2];
NSData webpData = [webpEncoder encode];

图片类型探测

// 获取图片类型
YYImageType type = YYImageDetectType(data); 
if (type == YYImageTypePNG) ...

安装

CocoaPods

  1. 将 cocoapods 更新至最新版本.
  2. 在 Podfile 中添加 pod 'YYImage'
  3. 执行 pod install  pod update
  4. 导入 <YYImage/YYImage.h>。
  5. 注意:pod 配置并没有包含 WebP 组件, 如果你需要支持 WebP,可以在 Podfile 中添加 pod 'YYImage/WebP'

Carthage

  1. 在 Cartfile 中添加 github "ibireme/YYImage"
  2. 执行 carthage update --platform ios 并将生成的 framework 添加到你的工程。
  3. 导入 <YYImage/YYImage.h>。
  4. 注意:carthage framework 并没有包含 WebP 组件。如果你需要支持 WebP,可以用 CocoaPods 安装,或者手动安装。

手动安装

  1. 下载 YYImage 文件夹内的所有内容。
  2. 将 YYImage 内的源文件添加(拖放)到你的工程。
  3. 链接以下 frameworks:
    • UIKit
    • CoreFoundation
    • QuartzCore
    • AssetsLibrary
    • ImageIO
    • Accelerate
    • MobileCoreServices
    • libz
  4. 导入 YYImage.h
  5. 注意:如果你需要支持 WebP,可以将 Vendor/WebP.framework(静态库) 加入你的工程。

常见问题

Q: 为什么我不能显示 WebP 图片?

A: 确保 WebP.framework 已经被添加到你的工程内了。你可以调用 YYImageWebPAvailable() 来检查一下 WebP 组件是否被正确安装。

Q: 为什么我不能播放 APNG 动画?

A: 你应该禁用 Build Settings 中的 Compress PNG Files  Remove Text Metadata From PNG Files. 或者你也可以把 APNG 文件的扩展名改为apng.

系统要求

该项目最低支持 iOS 6.0  Xcode 8.0

  • 升级到iOS14,之前使用的YYimage框架全部不能正常显示图片 原因是:14.0 系统调用了下面方法,YYAnimatedImageView没有正确处理 *-(void)displayLayer:(CALayer )layer; 可以用以下方式处理: 方式一: 更改YYimage源码,在YYAnimationImageView.m中 - (void)displayLayer:(CALayer

  • 引言 首先问一个问题:你会用图片么? 图片是现代化 APP 界面设计里应用广泛的东西,精美的图片可以带来视觉上的享受,提高用户体验。由此给技术上带来了一些挑战,比如动图的处理、图片显示流畅程度的优化、图片包大小的优化、超大图片的处理等。 本文主要是结合 YYImage 源码对图片处理技巧进行讲解。而笔者不会逐字逐句的翻译源码,主要是提取源码中有思维价值的东西。所以最好是打开源码,本文作为思想引导。

  • 一、YYImage 的使用 ① 特性 支持WebP、APNG、GIF类型动画图像的播放/编码/解码; 支持WebP、PNG、GIF、JPEG、JP2、TIFF、BMP、ICO、ICNS类型静态图像的显示/编码/解码; 支持PNG、GIF、JPEG、BMP类型图片的渐进式/逐行扫描/隔行扫描解码; 支持多张图片构成的帧动画播放,支持单张图片的 sprite sheet 动画; 高效的动态内存缓存管理

  • - (void)scrollViewDidScroll:(UIScrollView *)scrollView {     CGFloat viewHeight = scrollView.height + scrollView.contentInset.top;     for (YYWebImageExampleCell *cell in [self.tableView visibleCells]

  • 在移动端 App 中,图片通常占据着重要的视觉空间,作为 iOS 开发来讲,所有的 App 都有精心设计的 AppIcon 陈列在 SpringBoard 中,打开任意一款主流 App 都少不了琳琅满目的图片搭配。 YYImage 是一款功能强大的 iOS 图像框架(该项目是 YYKit 组件之一),支持目前市场上所有主流的图片格式的显示与编/解码,并且提供高效的动态内存缓存管理,以保证高性能低内

  • 前言 图片的历史早于文字,是最原始的信息传递方式。六书中的象形文构造思想就是用文字的线条或笔画,把要表达物体的外形特征,具体地勾画出来。 许慎《说文解字》云:“象形者,画成其物,随体诘诎,日、月是也。” 现代社会的信息传递中,图片仍然是不可或缺的一环,不论是报纸、杂志、漫画等实体刊物还是生活中超市地铁广告活动,都会有专门的配图抓人眼球。 在移动端 App 中,图片通常占据着重要的视觉空间,作为 i

  • YYImage 显示指定区域的webP图片 YYImage 显示区域与图片大小不一致时,默认显示的是居中部分 如果想指定显示区域 需要重写YYImage 以下代码为显示从1/8位置开始的图片 #import "PLImage.h" @implementation PLImage - (CGRect)animatedImageContentsRectAtIndex:(NSUInteger)ind

  • 如何禁止某个类调用某些方法 @interface YYImageEncoder : NSObject - (instancetype)init UNAVAILABLE_ATTRIBUTE; + (instancetype)new UNAVAILABLE_ATTRIBUTE; @end // - 实现 不可以直接调用 init 方法 可以调用 initWithType: 并且在initWithTy

  • #图片加载流程 ####先来了解几个概念 像素 图像的基本元素。举个例子:将一张图片放到PS中尽可能的放大,那么我们可以看到一个个的小格子,其中每个小格子就是一个像素点,每个像素点有且仅有一个颜色。 像素由四种不同的向量组成,即我们熟悉的RGBA(red,green,blue,alpha)。 位图 位图就是一个像素数组,数组中的每个像素都代表图片中的一个点。我们经常用到的JPEG和PNG图片就是位

  • 前言:为了在tableview 中更刘畅的加载 gif图片 1、使用 SDWebImage 的 SDAnimatedImageView 加载 gif 图片,少量无伤大雅,可以使用,大量会导致卡顿、崩溃 2、使用 YYWebImage 的 YYAnimatedImageView 加载 gif 图片,效果非常好,在 tableview 里边中没有卡顿现象, 3、使用 swift 的 Kingfishe

  • 升级到iOS14,之前使用的YYimage框架全部不能正常显示图片 原因是:14.0 系统调用了下面方法,YYAnimatedImageView没有正确处理 -(void)displayLayer:(CALayer )layer; 可以用以下方式处理: 方式一: 更改YYimage源码,在YYAnimationImageView.m中 - (void)displayLayer:(CALayer

 相关资料
  • 我有一个带有平铺背景图像和边框图像的Div。边框图像是带有角设计的透明. png,所以边框周围大约有90像素厚。IE在边框内启动背景图像,其中FF、Chrome和Safari在边框的外部边缘启动背景图像。在IE中,这会导致背景颜色(或主体的背景)通过透明. png边框图像显示。我尝试了背景剪辑和位置,让IE从边框外部开始背景图像,但没有运气。 我错过了什么或建议吗?样品现在就直播@样品 } 父对象

  • 为了实现丰富多彩的边框效果,在CSS3中,新增了 border-image属性,这个新属性允许指定一幅图像作为元素的边框。该属性的优点是,可以根据一些简单的规则,把一幅图像划分为 9 个单独的部分,浏览器会自动使用合适的部分作为边框的对应部分。 需要注意的是,只有当 border-style属性取值为 none 时,border-image属性才会有效。所以,如果定义的边框图像显示不出来,首先需要

  • 我试图创建一个,它将显示所选的预览,但是会显示字符串值。 唯一有效的方法似乎是创建

  • 我要做什么::我想使用我当前的实现为圆形图像添加一个黑色边框,如何在不使用第三方库的情况下实现这一点 全面转变。JAVA

  • 问题内容: 我正在尝试从我正在编写的iOS 8框架(在Swift中)加载图像。我正在使用Xcode 6 Beta 6 如果图像存储在我的框架中,则此代码不起作用(即加载图像): 如果映像存储在主机应用程序(使用框架)中,则将正确加载映像(从框架内的代码)。 我可以看到该阶段包含了框架。 我还将故事板文件用作框架中的资源。并正确加载。 我尝试重命名框架的Images.xcassets以避免与主机应用

  • CSS Border图像属性用于将图像边框添加到某些元素。您不需要使用任何HTML代码来调用边框图像。边框图像的示例语法如下 - #borderimg { border: 10px solid transparent; padding: 15px; } 最常用的值如下所示 - Sr.No. 价值和描述 1 border-image-source 用于设置图像路径 2 border-i

  • 问题内容: 我正在寻找一个Java框架来帮助进行一些特定于图像的数据挖掘。我们有一组历史图像,我想对其进行分类和分类。我希望找到类似weka的东西http://www.cs.waikato.ac.nz/ml/weka/或Marsyas http://marsyas.sness.net,但更特定于通过图像数据进行筛选以找到图案。有什么建议? 问题答案: 如何使用OpenCV 库进行处理?从技术上讲,

  • 我需要得到所有图片的标题,我上传到画廊与redux。 这是Redux框架主题选项中的代码:https://docs.reduxframework.com/core/fields/gallery/ 我试图在WordPress网站上用以下代码显示标题(仅用于测试): 但是,这个代码返回我[标题]= 标题字段有一个值,但redux似乎没有保存信息,或者我的代码错了?