You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从HEIF编码图像文件创建CGImage?

从HEIF文件创建CGImage的方法

Core Graphics确实没有提供直接的CGImageCreateWithHEIFDataProvider这类方法,但可以借助ImageIO框架来处理HEIF格式的图像,它支持HEIF解码,还能兼容你原来处理JPEG/PNG的逻辑思路。

方法一:通过文件URL创建CGImage

先导入ImageIO框架:

#import <ImageIO/ImageIO.h>

然后使用CGImageSource解码HEIF文件:

NSString *imgFilepath = @"你的HEIF文件路径";
CFURLRef fileURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
                                                 (__bridge CFStringRef)imgFilepath,
                                                 kCFURLPOSIXPathStyle,
                                                 NO);

CGImageSourceRef imageSource = CGImageSourceCreateWithURL(fileURL, NULL);
if (imageSource) {
    // 读取HEIF文件中的第一个图像(HEIF可能包含多帧,按需调整索引)
    CGImageRef image = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
    if (image) {
        // 在这里使用你的CGImage对象,使用完成后记得释放
        // ...
        
        CGImageRelease(image);
    }
    CFRelease(imageSource);
}
CFRelease(fileURL);

方法二:通过数据提供者创建CGImage

如果已经获取到文件的NSData,也可以用DataProvider构建ImageSource:

NSData *imageData = [NSData dataWithContentsOfFile:imgFilepath];
CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)imageData);
CGImageSourceRef imageSource = CGImageSourceCreateWithDataProvider(dataProvider, NULL);

if (imageSource) {
    CGImageRef image = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
    if (image) {
        // 使用image并后续释放
        // ...
        
        CGImageRelease(image);
    }
    CFRelease(imageSource);
}
CGDataProviderRelease(dataProvider);

额外说明

CGImageSource会自动识别文件编码格式,不需要像之前那样判断扩展名,不仅支持HEIF,也兼容JPEG、PNG等格式,用这种方式可以统一你的图像加载逻辑。

内容的提问来源于stack exchange,提问作者Paolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:50:21