首页
学习
活动
专区
圈层
工具
发布

Mac开发跬步积累(四):ImageIO解析Gif 图像数据

(iOS)默认是无法动画显示Gif格式的图片资源 0x00: 什么是Gif 图片?...,有了这个基础认识,我们就可以使用代码来解析Gif图像了. 0x01: 关于ImageIO 框架 在iOS4.0+和macOS1.08+之后苹果提供了ImageIO框架,它是一个图像管理框架,提供了对图像的读写...根据CGImage 创建NSImage */ let image = NSImage(cgImage: cgImageRef, size: CGSize(width: cgImageRef.width...NSTimer的执行间隔了. 0x04: 小结 我们通过ImageIO 实现了手动解析Gif图像资源,并使用NSTimer循环所有图片数组实现Gif 的动画效果.通过这个例子希望能够帮助大家进一步的了解在...本文仅是关于ImageIO的一个简单介绍,通过解析Gif图像数据来揭开这个框架的冰山一角,后续有机会再继续补充. 0x05: One more thing....

2.5K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CALayer 实用属性补充

    历史原因造成的,因为在Mac中这个属性对CGImage和NSImage都起作用),意味着它可以时任何对象类型,但实际上,如果给contents赋值不是CGImageRef,得到的都将是空白图片。...kCAGravityResizeAspectFill  contentsScale 这个属性是浮点类型,默认值为1.0,它定义了像素尺寸和视图大小的比例(类似于分辨率,UIView相似功能的属性是contentScaleFactor...当我们使用UIImage时,会获取高质量的图片,但CGImage没有拉伸概念,因此使用CGImage设置图片时,拉伸的因素会在转换的时候丢失,当用代码设置contents图片时,要手动设置图层的contentsScale...的属性,避免Retina屏幕显示错误 layer.contentsScale = [UIScreen mainScreen].scale; ?...与bounds和frame不同,contentsRect不是使用点来计算的,它使用了单位坐标,值在0~1之间。默认值是{0,0,1,1},意为整个图片大小。 ?

    1.2K30

    iOS 页面渲染 - UIView & CALayer

    今天我们来聊一聊 UIView 与 CALayer 的相关知识以及它们之间的关系,其实这部分内容要是引申出来会比较多,今天我们先收敛一下,先讲一些基本的东西,后面还会有系列文章对其进行扩展。...纹理是 GPU 进行图像渲染的重要依据。...(For example, NSImage objects are * supported on Mac OS X 10.6 and later.)...这是因为在 Mac OS 系统中,该属性对 CGImage 和 NSImage 类型的值都起作用,而在 iOS 系统中,该属性只对 CGImage 起作用。...frame:表示视图在父视图中显示出来的位置和大小,CGReact 类型,其显示位置是相对父视图坐标系而言的; bounds:表示视图相对于自身显示出来的位置与大小,CGReact 类型,其显示位置是相对自身视图坐标系而言的

    2.6K20

    Chrome 会成为 OpenAI 的下一个目标?| 肘子的 Swift 周报 #081

    【Tip】解决在 Monorepo 项目中 SwiftLint 配置文件无效[5] 近期推荐 让 NSImage 支持并发安全传递[6] Swift 6 对并发编程引入了更严格的检查,要求跨线程使用的类型必须是安全可发送的...Khoa Pham[7]在文中提供了三种应对方式:使用 @unchecked Sendable强制标注、将 NSImage转换为 Sendable 友好的数据(如 PNG 数据或 CGImage)、或通过...,往往只能看到 (YourError error 0)这样的模糊信息。...配合他发布的 ErrorKit[12],开发者可以在保留原生错误处理语法的同时,显著提升错误信息的清晰度、可控性与本地化支持。...://l.fatbobman.com/w081-02 [9] Natalia Panferova: https://x.com/natpanferova [10] 优雅地解决 Swift 错误处理的历史遗留问题

    57900

    CALayer的寄宿图

    contents之所以被定义为 id 类型,是因为在MacOS中,该属性对CGImage和NSImage类型都起作用。...- (nullable CGImageRef)CGImage; 如果你想把这个值直接赋值给contents,那么你将得到一个编译错误,因为CGImageRef并不是一个真正的cocoa对象,而是CoreFoundation..."].CGImage); 下面我一段完整的代码: UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)]...但是CGImage是使用像素来表示大小,所以如果不给layer设置contentsScale,那么它上面的图片就会展示原始的像素大小,在Retina屏幕上会根据分辨率的不同而展示出不同的大小。...contentsRect的默认值是{0,0,1,1},它表示的是,从寄宿图像素尺寸的原点(0,0)开始,分别截取宽、高的1倍长度,其实就是展示整个寄宿图。

    1.5K20

    AlamofireImage 源码阅读

    在AlamofireImage中一共就只有5个类加一些扩展 // 错误处理类,继承自Error,主要有requestCancelled(请求取消)、imageSerializationFailed(请求失败...)两种错误 AFIError // 定义图片对象,主要用来适配mac(NSImage)和ios(UIImage)平台 Image // 图片内存缓存对象 ImageCache // 图片下载对象(下载基于...Alamofire) ImageDownloader // 图片滤镜对象(CoreGraphics切圆角,CoreImage滤镜) ImageFilter 一、图片加载过程 AlamofireImage中的扩展定义了很多快速对...UI控件设置图片的方法,我挑其中一个来详解AlamofireImage是怎样将图片加载到视图上的 // 该方法是UIImageView的一个扩展方法,其它控件的扩展方法都差不多一样 public func...) } 2.滤镜 // 将图片变化到指定大小 public struct ScaledToSizeFilter: ImageFilter, Sizable { /// 变换后的大小 public

    1.7K60

    Mac开发跬步积累(一):Cocoa Drawing 之 NSImage imageNamed: 到底做了什么?

    为了说清楚这个问题,我们先从最基本的知识开始着手~ Basics 首先,NSImage提供了支持多种格式图像数据进行管理的api, 但是NSImage对被其管理的实际图像数据几乎是一无所知的,这是因为...:大小,颜色空间,图片格式 NSImageRep类也负责图片数据的存取和转换工作: 它知道如何从一个文件中获取图像数据,或者将图像数据写入到一个文件中去.它也会将图片数据进行转换后显示到对应的上下文环境中...为了避免图像数据在内存中存在多个副本,NSImage一旦建立了图像缓存数据后就会丢弃内存中的图像原数据(通常是因为出于节省内存和提高性能的考虑),但是如果你需要经常修改图像原数据信息(比如图像大小等属性...)并及时更新显示的效果,就需要让NSImage保留图像原数据,此时你必须调用NSImage 的setDataRetained:方法,并且推荐你在创建NSImage对象后立即调用这个方法,因为如果图像已经渲染显示或者被你...print(img1) // NSImage 0x60000007f7c0 Name=youwin Size={310, 105} print(img2) // NSImage 0x60000007f7c0

    1.7K30

    图层树和寄宿图 -- iOS Core Animation 系列一

    contents 这个奇怪的表现是由 Mac OS 的历史原因造成的,因为在 Mac OS 系统上,这个属性对 CGImage 和 NSImage 类型的值都起作用。...2.1.3 contentsScale contentsScale属性定义了寄宿图的像素尺寸和视图大小的比例,默认情况下是一个1.0的浮点数。...单位坐标指定在0到1之前,是一个相对值(像素和点就是绝对值)。 默认的contentsRect是{0, 0, 1, 1},意味着整个寄宿图默认都是课件的。如果指定小一点的矩形,图片就会被裁剪: ?...它定义了一个苦丁的边框和在图层上可拉伸的区域。 默认情况下,contentsCenter是{0, 0, 1, 1},意味着如果大小改变(contentsGravity),寄宿图会被均匀的拉伸。...这个寄宿图的像素尺寸等于视图大小乘以contentsScale。

    1.7K20

    直播APP常用动画效果

    烟花 图片压缩、加载与裁剪 1、图片压缩 美术给出的图片,即使是压缩过,仍存在较大的压缩空间,可以用这里或者更好的大小优化。...3、图片裁剪 为了减少图片资源的大小,有时候会把多个帧动画做成连续的一张图。这时需要程序加载一整张资源图,并在相应的位置进行裁剪。...CGRectMake(0, 0, const_position_boat_x, sourceSize.height)); gWaveFrameImage = [UIImage imageWithCGImage...CGRectMake(const_position_boat_x + const_position_boat_width, 0, sourceSize.width - const_position_boat_x...天使动画的图片大小为900KB,运行时占内存15MB,播放完毕后,如果收到内存不足的警告会释放内存; 烟花动画的图片大小为400KB,运行时占用的内存为20MB,播放完毕后,会马上释放内存; 思考题?

    2.4K80

    iOS拍照图片旋转的问题

    CGContextDrawImage(ctx, CGRectMake(0,0,self.size.height,self.size.width), self.CGImage);...这里面涉及到图像矩阵变换的操作,理解起来可能稍稍有些困难,接下来,我会有另外一篇文章专门来介绍图像变换。...现在,记住下面两点便能够很好的帮助理解: 图像的原点在左下角 矩阵变换时,后面的矩阵先作用,前面的矩阵后作用 以UIImageOrientationDown方向为例, ? ,很明显它翻转了180度。...x方向上移动距离为图像的宽度,y方向上移动距离为图像的高度,所以平移后图像变为: ? 。...(); return normalizedImage; } 这里是利用了UIImage中的drawInRect方法,它会将图像绘制到画布上,并且已经考虑好了图像的方向,开发文档这样解释: -drawInRect

    6.8K40
    领券