IOS从屏幕截图并裁剪压缩到指定宽高
2016-01-30 10:55
381 查看
Author:baohonglai
Email:baohonglai@gmail.com
版权所有。转载本BLOG内任何文章,请以超链接形式注明出处。
前段时间处理了一个问题,从指定view上截取图片并按照指定宽高输出。网上找了很多办法,只找到了从view截图的方法,并没有一次性按照指定宽高的方法输出,下面总结下自己的方法,当然肯定有更高效的方法,望指点一下。
首先先写一个图片裁剪以及scale的接口
然后就是从指定的view上获取UIimage了
注意上面这段代码可能会耗时比较多,所以具体实现的时候需要用异步的方式。
Email:baohonglai@gmail.com
版权所有。转载本BLOG内任何文章,请以超链接形式注明出处。
前段时间处理了一个问题,从指定view上截取图片并按照指定宽高输出。网上找了很多办法,只找到了从view截图的方法,并没有一次性按照指定宽高的方法输出,下面总结下自己的方法,当然肯定有更高效的方法,望指点一下。
首先先写一个图片裁剪以及scale的接口
- (UIImage *)imageScaleWithImage:(UIImage*) image withWidth:(CGFloat ) width withHeight:(CGFloat) height { if (!image) { return nil; } EAGLContext *previousContext = [EAGLContext currentContext]; [EAGLContext setCurrentContext:nil]; CIImage *ciimage = [CIImage imageWithCGImage:image.CGImage]; CGFloat imageWidth = ciimage.extent.size.width;//需要取UIimage里面的CIImage 的宽高 CGFloat imageHeight = ciimage.extent.size.height; CGFloat srcRatio = imageWidth/(imageHeight*1.0); CGFloat desRatio = width/(height*1.0); CIContext *context = [CIContext contextWithOptions:nil]; //scale CGFloat scale = srcRatio < desRatio ? (width/imageWidth) : (height/imageHeight); ciimage = [ciimage imageByApplyingTransform:CGAffineTransformMakeScale(scale, scale)]; CGRect extent = ciimage.extent; CGRect resultRect = CGRectMake(extent.origin.x+(extent.size.width - width)/2, extent.origin.y+(extent.size.height - height)/2, width, height); CGImageRef ref = [context createCGImage:ciimage fromRect:resultRect]; UIImage *resultImage = [UIImage imageWithCGImage:ref]; [EAGLContext setCurrentContext:previousContext]; return resultImage; }
然后就是从指定的view上获取UIimage了
- (UIImage*) snapshotWithWidth:(CGFloat) width withHeight:(CGFloat) height { UIView *view =self.view; if ([view isKindOfClass:NSClassFromString(@"UIView")]) { UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0); [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImage *resutImage = [self imageScaleWithImage:viewImage withWidth:width withHeight:height]; return resultImage; } return nil }
注意上面这段代码可能会耗时比较多,所以具体实现的时候需要用异步的方式。
相关文章推荐
- iOS 错误提示
- iOS 牛人博客
- IOS开发之代码之九宫格
- 使用HTML5构建iOS8原生APP
- iOS 本地通知
- 1、OMD安装(check mk+nagios+...) ,版本:RHEL7+OMD1.2.4p5
- iOS开发之各种动画各种页面切面效果
- ios 视图切换翻页效果
- 自己创建Cocoa touch FrameWork
- 一些iOS常用的第三方库和控件
- [iOS]如何删除工程里面用cocoapods导入的第三方库
- IOS项目开发实战——Storyboard设置界面技巧与注意事项
- 利用RunTime实现iOS不同版本下使用不同的图片
- iOS开发流程
- 软件瘦身,ios
- iOS 保持界面流畅的技巧
- iOS后台播放
- 【iOS提高】CoreAnimation--Layer
- ios开发(1)
- iOS Label行间距设置