加载webp图片颜色显示不对
Opened this issue · 1 comments
DoromGeng commented
问题:图片背景鲜红色变成了暗红色
图片链接:https://postimg.cc/FYJ7ysH5/1106a583
效果对比
原始图
YY加载图
DoromGeng commented
一、添加新方法
`- (nonnull CGColorSpaceRef)createColorSpaceWithDemuxer:(nonnull WebPDemuxer *)demuxer CF_RETURNS_RETAINED
{
CGColorSpaceRef colorSpaceRef = NULL;
uint32_t flags = WebPDemuxGetI(demuxer, WEBP_FF_FORMAT_FLAGS);
if (flags & ICCP_FLAG) {
WebPChunkIterator chunk_iter;
int result = WebPDemuxGetChunk(demuxer, "ICCP", 1, &chunk_iter);
if (result) {
// See #2618, the `CGColorSpaceCreateWithICCProfile` does not copy ICC Profile data, it only retain `CFDataRef`.
// When the libwebp `WebPDemuxer` dealloc, all chunks will be freed. So we must copy the ICC data (really cheap, less than 10KB)
NSData *profileData = [NSData dataWithBytes:chunk_iter.chunk.bytes length:chunk_iter.chunk.size];
if (@available(iOS 10, tvOS 10, macOS 10.12, watchOS 3, *)) {
colorSpaceRef = CGColorSpaceCreateWithICCData((__bridge CFDataRef)profileData);
} else {
colorSpaceRef = CGColorSpaceCreateWithICCProfile((__bridge CFDataRef)profileData);
}
WebPDemuxReleaseChunkIterator(&chunk_iter);
if (colorSpaceRef) {
// We use RGB color model to decode WebP images currently, so we must filter out other colorSpace
CGColorSpaceModel model = CGColorSpaceGetModel(colorSpaceRef);
if (model != kCGColorSpaceModelRGB) {
CGColorSpaceRelease(colorSpaceRef);
colorSpaceRef = NULL;
}
}
}
}
return colorSpaceRef;
}
`
二、在2195行修改为如下代码-使用webp本身的颜色空间
CGColorSpaceRef colorspce = [self createColorSpaceWithDemuxer:_webpSource]; if(!colorspce) { colorspce = YYCGColorSpaceGetDeviceRGB(); } CGImageRef image = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorspce, bitmapInfo, provider, NULL, false, kCGRenderingIntentDefault);