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:已验证
在写这篇文章的时候突然看到UIImageView的contentmode属性有:UIViewContentModeTop想到了下面的方法,不需要使用图片的裁剪,但是未经尝试,不知道是否可行
而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; }
相关文章推荐
- iOS开发—iOS多线程编程之NSThread的使用
- iOS日期与时间处理
- iOS打电话,发短信,发邮件,打开网址
- iOS开发学习第十二课——函数指针定义 、函数回调 、动态排序
- ios学习路线
- iOS开发起步
- iOS 实现后台运行
- IOS开发之多线程使用
- iOS上架错误集合
- iOS 定制手机通讯录(4)
- iOS 定制手机通讯录(3)
- iOS 定制手机通讯录(2)
- iOS 定制手机通讯录(1)
- iOS开发:获取视频特定时段的截图
- iOS学习笔记--手势事件
- iOS开发:获取一个视频、音频文件的播放时长
- iOS 报错 Assert Catalog Complier Error Fail to write PNG data for the launach image......
- iOS8、Xcode6下 设置Launch Image 启动图片,为什么按命名规范还是不出来照片
- iOS8自适应布局视频教程
- IOS ARC跟block那点事