iO图片处理(如截屏、圆角、改变大小等)
来源:互联网 发布:java 模板编程 编辑:程序博客网 时间:2024/06/07 09:01
// 获取截屏- (UIImage *)GetScreenImage{ UIGraphicsBeginImageContext(self.view.bounds.size); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image;}
// 截取屏幕中局部图片 arect想要截图的区域-(void)GetScreenImageWithRect:(CGRect)aRect{ UIGraphicsBeginImageContextWithOptions(CGSizeMake(640, 960), YES, 0); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); CGImageRef imageRef = viewImage.CGImage; CGRect rect =aRect; //这里可以设置想要截图的区域 CGImageRef imageRefRect =CGImageCreateWithImageInRect(imageRef, rect); UIImage *sendImage = [[UIImage alloc] initWithCGImage:imageRefRect]; NSData *imageViewData = UIImagePNGRepresentation(sendImage); // 第一,保存到沙盒 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"zone.png"]; NSLog(@"%@", savedImagePath); [imageViewData writeToFile:savedImagePath atomically:YES]; CGImageRelease(imageRefRect); // 第二,保存到相册 UIImage *image = [UIImage imageWithData:imageViewData]; UIImageWriteToSavedPhotosAlbum(image, self, nil, nil);}
// 将图片裁剪成圆角的,并没有改变图片的质量static void AddRoundedRectToPath(CGContextRef context, CGRect rect, float ovalWidth, float ovalHeight){ float fw, fh; if (ovalWidth == 0 || ovalHeight == 0) { CGContextAddRect(context, rect); return; } CGContextSaveGState(context); CGContextTranslateCTM(context, CGRectGetMinX(rect), CGRectGetMinY(rect)); CGContextScaleCTM(context, ovalWidth, ovalHeight); fw = CGRectGetWidth(rect) / ovalWidth; fh = CGRectGetHeight(rect) / ovalHeight; CGContextMoveToPoint(context, fw, fh/2); // Start at lower right corner CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1); // Top right corner CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1); // Top left corner CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1); // Lower left corner CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1); // Back to lower right CGContextClosePath(context); CGContextRestoreGState(context);}- (UIImage *)GetRoundedRectImage:(UIImage *)image roundRadius:(CGFloat)radius{ if (!radius) { radius = 8; } // the size of CGContextRef int w = image.size.width; int h = image.size.height; UIImage *img = image; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedFirst); CGRect rect = CGRectMake(0, 0, w, h); CGContextBeginPath(context); AddRoundedRectToPath(context, rect, radius, radius); CGContextClosePath(context); CGContextClip(context); CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage); CGImageRef imageMasked = CGBitmapContextCreateImage(context); CGContextRelease(context); CGColorSpaceRelease(colorSpace); return [UIImage imageWithCGImage:imageMasked];}
// 改变图片大小- (UIImage *)ReSizeImage:(UIImage *)image toSize:(CGSize)reSize{ UIGraphicsBeginImageContext(CGSizeMake(reSize.width, reSize.height)); [image drawInRect:CGRectMake(0, 0, reSize.width, reSize.height)]; UIImage *reSizeImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return reSizeImage; }
// 方形图片- (UIImage *)GetSquareImageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize{ double ratio; double delta; CGPoint offset; CGSize sz = CGSizeMake(newSize.width, newSize.width); if (image.size.width > image.size.height) { ratio = newSize.width / image.size.width; delta = (ratio*image.size.width - ratio*image.size.height); offset = CGPointMake(delta/2, 0); } else { ratio = newSize.width / image.size.height; delta = (ratio*image.size.height - ratio*image.size.width); offset = CGPointMake(0, delta/2); } CGRect clipRect = CGRectMake(-offset.x, -offset.y, (ratio * image.size.width) + delta, (ratio * image.size.height) + delta); if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { UIGraphicsBeginImageContextWithOptions(sz, YES, 0.0); } else { UIGraphicsBeginImageContext(sz); } UIRectClip(clipRect); [image drawInRect:clipRect]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage;}
// UIImage转为灰度图 CGColorSpaceCreateDeviceGray会创建一个设备相关的灰度颜色空间的引用。- (UIImage *)GetGrayImage:(UIImage *)sourceImage{ int width = sourceImage.size.width; int height = sourceImage.size.height; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); CGContextRef context = CGBitmapContextCreate (nil,width,height,8,0,colorSpace,kCGImageAlphaNone); CGColorSpaceRelease(colorSpace); if (context == NULL) { return nil; } CGContextDrawImage(context,CGRectMake(0, 0, width, height), sourceImage.CGImage); UIImage *grayImage = [UIImage imageWithCGImage:CGBitmapContextCreateImage(context)]; CGContextRelease(context); return grayImage;}
// 图像压缩- (UIImage *)ScaleFromImage:(UIImage *)image scaledToSize:(CGSize)newSize{ CGSize imageSize = image.size; CGFloat width = imageSize.width; CGFloat height = imageSize.height; if (width <= newSize.width && height <= newSize.height) { return image; } if (width == 0 || height == 0) { return image; } CGFloat widthFactor = newSize.width / width; CGFloat heightFactor = newSize.height / height; CGFloat scaleFactor = (widthFactor<heightFactor?widthFactor:heightFactor); CGFloat scaledWidth = width * scaleFactor; CGFloat scaledHeight = height * scaleFactor; CGSize targetSize = CGSizeMake(scaledWidth,scaledHeight); UIGraphicsBeginImageContext(targetSize); [image drawInRect:CGRectMake(0,0,scaledWidth,scaledHeight)]; UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage;}
// GIF图片解析将gif图片解析成image数组(注:需使用 #import <ImageIO/ImageIO.h>)+ (NSMutableArray *)praseGIFDataToImageArray:(NSData *)data;{ NSMutableArray *frames = [[NSMutableArray alloc] init]; CGImageSourceRef src = CGImageSourceCreateWithData((CFDataRef)data, NULL); CGFloat animationTime = 0.f; if (src) { size_t l = CGImageSourceGetCount(src); frames = [NSMutableArray arrayWithCapacity:l]; for (size_t i = 0; i < l; i++) { CGImageRef img = CGImageSourceCreateImageAtIndex(src, i, NULL); NSDictionary *properties = (NSDictionary *)CFBridgingRelease(CGImageSourceCopyPropertiesAtIndex(src, i, NULL)); NSDictionary *frameProperties = [properties objectForKey:(NSString *)kCGImagePropertyGIFDictionary]; NSNumber *delayTime = [frameProperties objectForKey:(NSString *)kCGImagePropertyGIFUnclampedDelayTime]; animationTime += [delayTime floatValue]; if (img) { [frames addObject:[UIImage imageWithCGImage:img]]; CGImageRelease(img); } } CFRelease(src); } return frames;}
// 圆角处理(lay层处理)- (void)resetImage:(UIImageView *)imageview corner:(CGFloat)corner rasterize:(BOOL)rasterize{ if (imageview) { imageview.clipsToBounds = YES; imageview.layer.masksToBounds = YES; imageview.layer.cornerRadius = corner; // UIImageView不加这句会产生一点模糊 imageview.layer.rasterizationScale = [UIScreen mainScreen].scale; // 设置光栅化,可以使离屏渲染的结果缓存到内存中存为位图。使用的时候直接使用缓存,节省了一直离屏渲染损耗的性能 imageview.layer.shouldRasterize = rasterize; }}
// 圆角处理(drawRect处理)- (void)resetImage:(UIImageView *)imageview corner:(CGFloat)corner image:(UIImage *)image{ if (imageview && image) { UIGraphicsBeginImageContextWithOptions(imageview.bounds.size, NO, [UIScreen mainScreen].scale); [[UIBezierPath bezierPathWithRoundedRect:imageview.bounds cornerRadius:corner] addClip]; [image drawInRect:imageview.bounds]; imageview.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); }}
0 0
- iO图片处理(如截屏、圆角、改变大小等)
- 处理图片,比如,缩放、改变大小等
- 代码改变按钮,图片等大小
- Android中的图片处理(包括缓存、大小、优化等)
- 如何使用JS等比例改变显示图片的大小
- java 等比例 改变图片的质量(等大小压缩图片)
- 改变图片的大小
- java中用Thumbnailator对图片各种处理的方法(可做到对原图片压缩仅改变大小)
- java改变图片的大小
- 绘制改变大小的图片
- Android改变位图(图片)大小
- Java改变图片的大小
- Java改变图片的大小
- Java改变图片的大小
- Java改变图片的大小
- Java改变图片的大小
- iOS 改变图片的大小
- UIWebView改变HTML中图片的大小,进行等比例缩放
- 对docume,准确获取网页客户区的宽高、滚动条宽高、滚动条Left和Top
- 搜索引擎七:总结
- 快速掌握shell基础目录
- 世界上最美好的两个字是,相信
- Python Tkinter 布局管理器
- iO图片处理(如截屏、圆角、改变大小等)
- 六种方式实现hibernate查询
- 高效自学编程的经验一
- 如何在ubuntu 安装 redmine
- 你一定要相信
- 双缓冲绘图——黑白位图和彩色位图问题
- 文件与目录操作
- BZOJ 2813 奇妙的Fibonacci
- 使用 jQuery Mobile 与 HTML5 开发 Web App(五) —— jQuery Mobile 表单下