天才是百分之一的灵感加百分之九十九的汗水。——爱迪生
今天分享下我在实际应用中加载图片的处理
#pragma mark - 获取图片方法
+ (void) sd_webViewWithData:(NSString * ) urlString placeholderImage:(NSString *) placeholder WiBlock:(GJYWebImage)block{
UIImage *img;
if ([urlString isEqualToString:@""]) {//在工作中经常会发现图片地址为空
img = [UIImage imageNamed:placeholder];
block(img);
return;
}
SDWebImageManager *manager = [SDWebImageManager sharedManager];
if ([manager diskImageExistsForURL:[NSURL URLWithString:urlString]]) {
img = [[manager imageCache] imageFromDiskCacheForKey:[NSURL URLWithString:urlString].absoluteString];
block(img);
} else {
[[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:urlString] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {//这个方法下载图片,在子线程下,返回给主线程一个图片
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image == nil) {
UIImage * imagePlace = [UIImage imageNamed:placeholder];
block(imagePlace);
} else {
block(image);
} }];
} }
上面是没有对图片进行处理的下载方法,在大多数情况下,还需要对图片进行处理,获取固定尺寸的图片,下面的例子是针对固定尺寸进行图片下载的处理:
#pragma mark - 获取指定尺寸的图片
+ (void) sd_imageScaleWithURL:(NSString *) urlStr placeholderImage:(NSString *) placeholder withSize:(CGSize) size WiBlock:(GJYWebImage)block{
UIImage *img;
if ([urlStr isEqualToString:@""]) {
img = [UIImage imageNamed:placeholder];
block(img);
return;
}
SDWebImageManager *manager = [SDWebImageManager sharedManager];
if ([manager diskImageExistsForURL:[NSURL URLWithString:urlStr]]) {
img = [[manager imageCache] imageFromDiskCacheForKey:[NSURL URLWithString:urlStr].absoluteString];
block(img);
} else {
[manager downloadImageWithURL:[NSURL URLWithString:urlStr] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image == nil) {
UIImage * imagePlace = [UIImage imageNamed:placeholder];
block(imagePlace);
} else {
UIImage * newImg = [image scaleImageWithSize:size];//对图片进行指定尺寸的处理,主要是对大图进行缩放,小图放大的处理
SDImageCache * chace = [SDImageCache new];
[chace storeImage:newImg recalculateFromImage:YES imageData:nil forKey:urlStr toDisk:YES];//存储图片
block(newImg);
} }];
} }
下面是图片处理(建立了一个category):
/** 缩放图片到指定Size */
- (UIImage *)scaleImageWithSize:(CGSize)size{
if (CGSizeEqualToSize(size, self.size)) {
return self;
}
//创建上下文
UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
//绘图
[self drawInRect:CGRectMake(0, 0, size.width, size.height)];
//获取新图片 UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();// 注意一定要关闭,要不会内存泄漏,
return newImage;
}
上面是我对图片的处理,图片的处理一般很麻烦,针对不同情况进行不同处理,具体问题具体分析。
文笔不好,见谅!
有不对的地方欢迎来指导!