ALAsset 缩略图有黑色背景
Posted
技术标签:
【中文标题】ALAsset 缩略图有黑色背景【英文标题】:ALAsset thumbnail have black background 【发布时间】:2013-04-10 14:49:44 【问题描述】:我通过使用ALAssetsLibrary
类编写了自己的图像选择器类。
几乎一切都很好,但有些图像缩略图具有黑色背景,而实际图像是透明/alpha 通道。
如何解决这个问题?
这是我从 ALAsset 缩略图属性加载图像的枚举块:
[reversedItems enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void)
UIImage *image = [UIImage imageWithCGImage:[[_assets objectAtIndex:allItems - idx] thumbnail]];
dispatch_async(dispatch_get_main_queue(), ^
GridView *gridView = (GridView *)obj;
gridView.imageView.image = image;
);
);
];
【问题讨论】:
有同样的问题,但是尝试在ios设备上启动应用程序,在设备上你应该看不到黑色背景,好像它只出现在模拟器中 实际上我在设备上看到了那个背景。 查看模拟器文件系统并找到缩略图,看看它们保存在哪种格式。据我所知,它是 jpeg 或其他不支持 alpha 通道的格式。我知道专辑列表中的缩略图是 tiff 并且没有 alpha 通道。 首先我不在模拟器上测试;第二,即使我在模拟器上测试在哪里可以找到这些缩略图。 【参考方案1】:如果您使用 fullScreenImage 属性,有一个解决方法,它的执行速度应该会变慢,但应该可以正常工作。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
ALAsset *asset = [_assets objectAtIndex:allItems - idx];
UIImage *smallImage = [UIImage imageWithCGImage:[asset thumbnail]];
UIImage *image;
CGSize size = [smallImage size];
CGRect box = CGRectMake(0, 0, size.width, size.height);
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);
CGContextFillRect(context, box);
CGContextTranslateCTM(context, 0.0, size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, box, [[asset defaultRepresentation] fullScreenImage]);
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^
TTGridView *gridView = (TTGridView *)obj;
gridView.imageView.image = image;
);
);
【讨论】:
以上是关于ALAsset 缩略图有黑色背景的主要内容,如果未能解决你的问题,请参考以下文章
golang https://www.v2ex.com/t/303711基于微信显示png图片缩略图背景为白色,放大后背景图为黑色的Bug