-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
大图使用有内存暴增的问题 #12
Comments
应该是反复压缩内存没释放 |
只是处理了一张高清的大图。 |
@kukumaluCN 把图片发给我,我调试一下,看这个 250M 是怎么增加的 |
其实最消耗内存的是 |
@kukumaluCN [email protected] 另外我看了下,你测试的代码是为了较少峰值而牺牲了压缩质量,我个人认为这样压缩出来的大小并不是最理想的。 你测试的工程如果方便的话也发给我一下下。另外压缩这么大的图片,我还是第一次,也算是个机会看压缩超大图能不能造出来另外一种机制。 |
关注内存峰值是必须的,因为我们项目的特殊性,需要兼容比较老的设备,运存512M那种,我们测试发现,瞬时内存峰值超过200M,就会造成crash,所以没办法,必须优化内存占用和内存峰值。 这个是微信的压缩算法,微信以1280为边界值做裁剪压缩处理,压缩系数0.5: 这个是微信的压缩算法,微信以1280为边界值做裁剪压缩处理,压缩系数0.1: 微信的压缩算法我参考了这个:iOS 图片压缩----微信图片处理策略,并做了算法优化,原理是一致的,关于压缩系数,取了0.5,这个产出和文中说的一致,和微信朋友圈的相当。 + (UIImage *)jxt_scaledImageWithData:(NSData *)data toSize:(CGSize)size
{
if (!data) {
return nil;
}
UIImage *thumbnail = nil;
CGImageSourceRef sourceRef = CGImageSourceCreateWithData((__bridge CFDataRef)data, nil);
if (sourceRef) {
CGFloat maxPixelSize = MAX(size.width, size.height);
NSDictionary *options = @{
(__bridge id)kCGImageSourceCreateThumbnailFromImageAlways:(__bridge id)kCFBooleanTrue,
(__bridge id)kCGImageSourceCreateThumbnailWithTransform:(__bridge id)kCFBooleanTrue,
(__bridge id)kCGImageSourceThumbnailMaxPixelSize:[NSNumber numberWithFloat:maxPixelSize]
};
CGImageRef imageRef = CGImageSourceCreateThumbnailAtIndex(sourceRef, 0, (__bridge CFDictionaryRef)options);
if (imageRef) {
thumbnail = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
}
CFRelease(sourceRef);
}
return thumbnail;
} |
我还发现,下面两个方式获取到的data的length,同一张图片,是有较大偏差的,有人说,第一个方法,系数要取0.7才可以。。。 NSData *data = UIImageJPEGRepresentation(self.imageView.image, 1.0); NSData *data = [NSData dataWithContentsOfFile:retinaPath]; |
图片已经发送至您的邮箱,期待进一步交流。 |
@kukumaluCN 好的好的👌。微信压缩的那个我之前看过也实现过,但 压缩后的大小我还是接受不了,清晰是很清晰,不适合多图上传的场景。于是实现了luban。在实际场景中,10张图片,用微信那个压缩后5M左右,luban压缩完1M左右,清晰度也还可以,当然了如果要更清晰的可以下载原图。 |
另外给你们产品经理商量一下,为什么有这么大的图片? |
对于一般场景为了避免使用
在本例中使用 可以这样子:
|
@kukumaluCN 您好,这里的微信压缩有开源的实现或者能提供一下代码吗?我想测试一下效果 |
压缩一张20M以上的图片,瞬时内存暴增250M,有没有好的解决方式呢?
The text was updated successfully, but these errors were encountered: