YYimage 是一个用于显示/编码/解码动画 WebP、APNG、GIF 等的 iOS 图像框架。
// 文件: 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];
// 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) ...
pod 'YYImage'
。pod install
或 pod update
。pod 'YYImage/WebP'
。github "ibireme/YYImage"
。carthage update --platform ios
并将生成的 framework 添加到你的工程。YYImage.h
。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似乎没有保存信息,或者我的代码错了?