iOS图片下载

2017-11-23  本文已影响0人  弗利撒

天才是百分之一的灵感加百分之九十九的汗水。——爱迪生

今天分享下我在实际应用中加载图片的处理

#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;

}

上面是我对图片的处理,图片的处理一般很麻烦,针对不同情况进行不同处理,具体问题具体分析。

文笔不好,见谅!

有不对的地方欢迎来指导!

上一篇 下一篇

猜你喜欢

热点阅读