下载图像 编辑图像然后缓存
Download Image Edit image then Cache
UIImageview + afnetworking 下载图片并缓存图片。
但在某些情况下,服务器图像 = 15mb。所以我需要根据一些因素压缩它们并将其压缩到 1mb 然后需要缓存它们。
另一方面,SDWebImageCache 使您可以定义自己的缓存并存储它们
是否有任何用于下载、编辑然后保存到缓存中的内置机制?
[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize)
{
// progression tracking code
}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished)
{
if (image && finished)
{
// do something with image
}
}];
然后使用
[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey]
除了这样做还有其他选择吗?
你的 SDWebImage
场景是正确的。
出于编辑目的,您需要将委托设置为 SDWebImageManager
对象并实施必要的方法:
// Set delegate
[SDWebImageManager sharedManager].delegate = self;
// Implement delegate method
- (UIImage *)imageManager:(SDWebImageManager *)imageManager
transformDownloadedImage:(UIImage *)image
withURL:(NSURL *)imageURL {
UIImage scaledImage = ... // Make scale based on 'image' object
return scaledImage;
}
请注意,此方法在图像下载后立即调用,但在将其存储到内存缓存之前以及调用完成块之前调用。
此方法的文档:
Allows to transform the image immediately after it has been downloaded
and just before to cache it on disk and memory. NOTE: This method is
called from a global queue in order to not to block the main thread.
之后你就可以使用 SDWebImageDownloader
和 SDImageCache
作为你的问题:
[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// progression tracking code
}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
if (image && finished) {
[[SDImageCache sharedImageCache] storeImage:image forKey:myCacheKey];
}
}];
然后可以使用SDImageCache
class的方法管理缓存:
- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock;
- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion;
如果您需要按最大数据大小缩放图像的算法,请查看 this 答案。
UIImageview + afnetworking 下载图片并缓存图片。
但在某些情况下,服务器图像 = 15mb。所以我需要根据一些因素压缩它们并将其压缩到 1mb 然后需要缓存它们。
另一方面,SDWebImageCache 使您可以定义自己的缓存并存储它们
是否有任何用于下载、编辑然后保存到缓存中的内置机制?
[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize)
{
// progression tracking code
}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished)
{
if (image && finished)
{
// do something with image
}
}];
然后使用 [[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey]
除了这样做还有其他选择吗?
你的 SDWebImage
场景是正确的。
出于编辑目的,您需要将委托设置为 SDWebImageManager
对象并实施必要的方法:
// Set delegate
[SDWebImageManager sharedManager].delegate = self;
// Implement delegate method
- (UIImage *)imageManager:(SDWebImageManager *)imageManager
transformDownloadedImage:(UIImage *)image
withURL:(NSURL *)imageURL {
UIImage scaledImage = ... // Make scale based on 'image' object
return scaledImage;
}
请注意,此方法在图像下载后立即调用,但在将其存储到内存缓存之前以及调用完成块之前调用。
此方法的文档:
Allows to transform the image immediately after it has been downloaded and just before to cache it on disk and memory. NOTE: This method is called from a global queue in order to not to block the main thread.
之后你就可以使用 SDWebImageDownloader
和 SDImageCache
作为你的问题:
[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// progression tracking code
}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
if (image && finished) {
[[SDImageCache sharedImageCache] storeImage:image forKey:myCacheKey];
}
}];
然后可以使用SDImageCache
class的方法管理缓存:
- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock;
- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion;
如果您需要按最大数据大小缩放图像的算法,请查看 this 答案。