如何使用苹果 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 图像的颜色图?的主要内容,如果未能解决你的问题,请参考以下文章

IOS支持显示GIF动画图片吗? [复制]

如何在 API 29 中弃用 getExternalStorageDirectory 时读取或写入文件?

我正在使用 Giphy API,我想知道如何自动获取 GIF 的图像 URL,而不是手动获取

如何在可读的 http 流上运行 Sharp 转换并写入 toFile

如何使用 ITK 将调色板图像读取为标量图像?

如何在 jpg 或 gif 照片中隐藏信息?