Iphone UIImage+;带SDWebImage的圆角
我正在使用将图像加载到我的表视图中。我想在我的表视图中的图像被调整大小,并有圆角。我发现我可以这样做。这两个库分别工作得很好,但我还没有将它们结合起来。我可以调整SDWebImage返回的图像的大小并使其圆角,但我发现这相当耗费资源,因此我希望在将图像保存到缓存之前调整其大小。 当图像第一次从网络加载时,它可能在保存到缓存之前显示,因此我还想在第一次加载时调整图像的大小 我无法做到这一点,因为我无法找出SDWebImage的哪种方法来操作图像。我所需要的就是调用SDWebImage中右边的UIImageIphone UIImage+;带SDWebImage的圆角,iphone,image,load,resize,tableview,Iphone,Image,Load,Resize,Tableview,我正在使用将图像加载到我的表视图中。我想在我的表视图中的图像被调整大小,并有圆角。我发现我可以这样做。这两个库分别工作得很好,但我还没有将它们结合起来。我可以调整SDWebImage返回的图像的大小并使其圆角,但我发现这相当耗费资源,因此我希望在将图像保存到缓存之前调整其大小。 当图像第一次从网络加载时,它可能在保存到缓存之前显示,因此我还想在第一次加载时调整图像的大小 我无法做到这一点,因为我无法找出SDWebImage的哪种方法来操作图像。我所需要的就是调用SDWebImage中右边的UII
UIImage *image = [image thumbnailImage:50 transparentBorder:0 cornerRadius:5 interpolationQuality:kCGInterpolationHigh];
有人能告诉我,在SDWebImage中,我应该将这段代码放在哪里,以便在将图像保存到缓存之前对其进行处理,并在从internet而不是缓存加载图像时将处理后的图像发送到图像视图吗?我解决了这个问题
应使用SDImageCache.m中的以下方法操作图像:
1. - (void)storeImage:(UIImage *)image forKey:(NSString *)key;
2. - (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk;
3. - (void)storeImage:(UIImage *)image imageData:(NSData *)data forKey:(NSString *)key toDisk:(BOOL)toDisk;
在第三种方法中,必须记住使用下面的代码将UIImage转换为NSData。如果toDisk
为true,则应执行此操作
NSData *croppedRoundedImageData = UIImageJPEGRepresentation(croppedRoundedImage, 1.0);
if (croppedRoundedImageData) data = croppedRoundedImageData;
使用if(crappedroundedimagedata)data=crappedroundedimagedata
如果您试图保存数据时数据为NULL
,则应用程序不会崩溃
在SDWebImageDownloader.m中,您必须在
-(void)connectionIDFinishLoading:(NSURLConnection*)a连接中添加用于操作的代码这用于首次加载图像(不在缓存中时)这是一个很好的发现,但我发现,通过在SDWebImageDownloader.m中添加图像处理代码,它可以为使用SDWebImage的所有图像生成缩略图。我所做的是创建一个SDWebImageManager实例并使用以下方法:
- (void) webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image;
要创建图像,唯一的问题是因为图像出现在不同的时间,我正试图找到一种方法,将它们与动作正确链接
不过答案很好。对于调整图像大小部分,我没有一个好答案
对于圆角功能,您完全走错了方向,这是我以前尝试做的。。。尝试调整每个图像的大小和圆整度,并将其保存到磁盘。。。。。。太复杂,太多事情要做
正确而简单的方法是设置表格单元格的UIImageView角半径:
cell.imageView.layer.cornerRadius = 8;
cell.imageView.layer.masksToBounds = YES;
我使用的是SDWebImage framework,它不允许我修改文件,但我有如下全局函数:
+ (UIImage*)circleImageWithImage:(UIImage*)image
{
UIImageView* imageView = [[UIImageView alloc] initWithImage:image];
CALayer *layer = [imageView layer];
[layer setMasksToBounds:YES];
[layer setCornerRadius:imageView.frame.size.width / 2];
UIGraphicsBeginImageContext(image.size);
[layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
+ (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize;
{
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
和全局函数来缩放图像,如下所示:
+ (UIImage*)circleImageWithImage:(UIImage*)image
{
UIImageView* imageView = [[UIImageView alloc] initWithImage:image];
CALayer *layer = [imageView layer];
[layer setMasksToBounds:YES];
[layer setCornerRadius:imageView.frame.size.width / 2];
UIGraphicsBeginImageContext(image.size);
[layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
+ (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize;
{
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
您需要的是SDWebImageManagerDelegate协议
我在AppDelegate类中实现了我们需要的方法
#pragma mark - SDWebImageManagerDelegate
-(UIImage*) imageManager:(SDWebImageManager *)imageManager transformDownloadedImage:(UIImage *)image withURL:(NSURL *)imageURL{
UIGraphicsBeginImageContextWithOptions(image.size, NO, [UIScreen mainScreen].scale);
CGRect box = CGRectMake(0, 0, image.size.width, image.size.height);
// Add a clip before drawing anything, in the shape of an rounded rect
[[UIBezierPath bezierPathWithRoundedRect:box
cornerRadius:15.f] addClip];
// Draw your image
[image drawInRect:box];
// Get the image, here setting the UIImageView image
UIImage* ret = UIGraphicsGetImageFromCurrentImageContext();
// Lets forget about that we were drawing
UIGraphicsEndImageContext();
return ret;
}
您可以告诉sharedManager这样使用您的委托
SDWebImageManager* imageManager = [SDWebImageManager sharedManager];
imageManager.delegate = self;
我用选项完成了启动
请记住,这种方法沿图像的边界以其本机大小进行剪辑。如果图像的边界在视图边界之外进行渲染(纵横比填充等),则不会看到圆角
这种方法比每次渲染时剪裁图像更有效,但要注意上述缺点。快速简便的方法,但会影响性能。在tableview性能方面,使用捷径渲染图像更好