如何使用苹果 API 读取或写入 gif 图像的颜色图?
Posted
技术标签:
【中文标题】如何使用苹果 API 读取或写入 gif 图像的颜色图?【英文标题】:how to read or write colormap of a gif image with apple API? 【发布时间】:2022-01-05 23:42:03 【问题描述】:我想用苹果的api读取一张gif图片的色图并重写,但是后面的代码不行,不知道为什么?
for(int i = 0;i < count; i ++)
const uint8_t colorTable[9] = 0, 0, 0, 128, 128, 128, 255,255,255 ;
NSData* colorTableData = [ NSData dataWithBytes: colorTable length:9];
NSMutableDictionary *frameProperties = [NSMutableDictionary dictionaryWithCapacity:3];
[frameProperties setObject:[NSNumber numberWithDouble:frameDelay] forKey:(NSString*)kCGImagePropertyGIFDelayTime];
[frameProperties setObject:[NSNumber numberWithDouble: 0.1] forKey:(NSString*)kCGImagePropertyGIFUnclampedDelayTime];
[frameProperties setObject:colorTableData forKey:(NSString*)kCGImagePropertyGIFImageColorMap];
NSDictionary *gifFrameProperties = [NSDictionary dictionaryWithObject:frameProperties forKey:(NSString*)kCGImagePropertyGIFDictionary];
CGImageRef originImage = CGImageSourceCreateImageAtIndex(sourceImageSrc, i, NULL);
CGImageDestinationAddImage(Destination, originImage, (__bridge CFDictionaryRef)gifFrameProperties);
【问题讨论】:
我已经使用这样的代码NSData *frameColorMap = [[frameInfo objectForKey:(NSString*)kCGImagePropertyGIFImageColorMap] objectValue];
读取颜色图,但返回为零
Swift 标签是干什么用的?
我的错,我删了。
【参考方案1】:
我找到了解决方案。gif 有一个用于整个文件的全局颜色映射和一个用于 gif 中每一帧的本地颜色映射。如果要设置本地颜色映射,请禁用全局颜色- map.代码如下:
[frameProperties setObject:targetColorMap forKey:(NSString*)kCGImagePropertyGIFImageColorMap];
[frameProperties setObject:[NSNumber numberWithBool:NO] forKey:(NSString*)kCGImagePropertyGIFHasGlobalColorMap];
【讨论】:
以上是关于如何使用苹果 API 读取或写入 gif 图像的颜色图?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 API 29 中弃用 getExternalStorageDirectory 时读取或写入文件?
我正在使用 Giphy API,我想知道如何自动获取 GIF 的图像 URL,而不是手动获取