您的位置:首页 > 移动开发 > IOS开发

iOS图片的截取(OC)

2015-06-03 23:37 337 查看
如果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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: