iOS图片的截取(OC)

来源:互联网 发布:所有云计算上市公司 编辑:程序博客网 时间:2024/06/06 02:17

如果UIImageView只需要展示图片的一部分时,需要使用图片截取

而UIImageView有contentmode属性如下:

UIViewContentModeScaleToFill

UIViewContentModeScaleAspectFit

UIViewContentModeScaleAspectFill

UIViewContentModeRedraw

UIViewContentModeCenter

UIViewContentModeTop

UIViewContentModeBottom

UIViewContentModeLeft

UIViewContentModeRight

UIViewContentModeTopLeft

UIViewContentModeTopRight

UIViewContentModeBottomLeft

UIViewContentModeBottomRight

其中UIViewContentModeScaleToFill属性将图片铺满整个ImageView会导致图片变形。UIViewContentModeScaleAspectFit保证图片比例不变,而且全部显示在ImageView中,这意味着ImageView会有部分空白。UIViewContentModeScaleAspectFill也会证图片比例不变,可能只有部分图片显示出来。

而本文只要实现的是,在无论图片大小的情况下UIImageView只显示图片最上方的部分,并且保证图片不能变形

由于imageView显示的是网络图片,所以使用第三方库:SDWebImage

方法1:已验证

//其中aView是UIImageview    [aView setImageWithURL:[NSURL URLWithString:str] placeholderImage:[UIImage imageNamed:@"placeHoldIcon"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {        UIImage *tempImage = [self scaleToSize:image size:CGSizeMake(width, width/image.size.width*image.size.height)];        aView.image = [UIImage imageWithCGImage:CGImageCreateWithImageInRect([tempImage CGImage], CGRectMake(0, 0, image.size.width, height))];//此方法可以截取图片的任意位置    }];//将图片压缩成一定的比例- (UIImage *)scaleToSize:(UIImage *)image size:(CGSize)size{    UIGraphicsBeginImageContext(size);    [image drawInRect:CGRectMake(0,0, size.width, size.height)];    UIImage* scaledImage =UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return scaledImage;}
方法2:未验证

在写这篇文章的时候突然看到UIImageView的contentmode属性有:UIViewContentModeTop想到了下面的方法,不需要使用图片的裁剪,但是未经尝试,不知道是否可行

//其中aView是UIImageview    [aView setImageWithURL:[NSURL URLWithString:str] placeholderImage:[UIImage imageNamed:@"placeHoldIcon"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {        aView.image = [self scaleToSize:image size:CGSizeMake(width, width/image.size.width*image.size.height)];        aView.contentmode = UIViewContentModeTop;    }];//将图片压缩成一定的比例- (UIImage *)scaleToSize:(UIImage *)image size:(CGSize)size{    UIGraphicsBeginImageContext(size);    [image drawInRect:CGRectMake(0,0, size.width, size.height)];    UIImage* scaledImage =UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return scaledImage;}

0 0
原创粉丝点击