UIIimage 图片的截图和压缩
来源:互联网 发布:安佳视讯软件 编辑:程序博客网 时间:2024/05/20 10:21
实用主义,直接上代码,欢迎拿走!
1,图片的压缩
- (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;}
转化为NSData 并压缩
//sdk中提供了方法可以直接调用 UIImage *img = [UIImage imageNamed:@"some.png"];NSData *dataObj = UIImageJPEGRepresentation(img, 1.0); //下面是sdk中UIImage.h头文件中的内容 UIKIT_EXTERN NSData *UIImagePNGRepresentation(UIImage *image); // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format UIKIT_EXTERN NSData *UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality); // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)JPEG的转换方法里面第二个参数是压缩系数,可以有效的减小图片的大小。UIImagePNGRepresentation(UIImage* image) 要比UIImageJPEGRepresentation(UIImage* image, 1.0) 返回的图片数据量大很多。项目中做图片上传之前,经过测试同一张拍照所得照片png大小在8M,而JPG压缩系数为0.75时候,大小只有1M。而且,将压缩系数降低对图片视觉上并没有太大的影响。
2,图片的截取
.h
#import <UIKit/UIKit.h>@protocol ImageCropperDelegate;@interface ImageCropper : UIViewController <UIScrollViewDelegate> { UIScrollView *scrollView; UIImageView *imageView; id <ImageCropperDelegate> delegate;}@property (nonatomic, retain) UIScrollView *scrollView;@property (nonatomic, retain) UIImageView *imageView;@property (nonatomic, assign) id <ImageCropperDelegate> delegate;- (id)initWithImage:(UIImage *)image;@end@protocol ImageCropperDelegate <NSObject>- (void)imageCropper:(ImageCropper *)cropper didFinishCroppingWithImage:(UIImage *)image;- (void)imageCropperDidCancel:(ImageCropper *)cropper;@end
.m
#import "ImageCropper.h"@implementation ImageCropper@synthesize scrollView, imageView;@synthesize delegate;- (id)initWithImage:(UIImage *)image { self = [super init]; if (self) { [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES]; scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0, -20.0, 320.0, 480.0)]; [scrollView setBackgroundColor:[UIColor blackColor]]; [scrollView setDelegate:self]; [scrollView setShowsHorizontalScrollIndicator:NO]; [scrollView setShowsVerticalScrollIndicator:NO]; [scrollView setMaximumZoomScale:2.0]; imageView = [[UIImageView alloc] initWithImage:image]; CGRect rect; rect.size.width = image.size.width; rect.size.height = image.size.height; [imageView setFrame:rect]; [scrollView setContentSize:[imageView frame].size]; [scrollView setMinimumZoomScale:[scrollView frame].size.width / [imageView frame].size.width]; [scrollView setZoomScale:[scrollView minimumZoomScale]]; [scrollView addSubview:imageView]; [[self view] addSubview:scrollView]; UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)]; [navigationBar setBarStyle:UIBarStyleBlack]; [navigationBar setTranslucent:YES]; UINavigationItem *aNavigationItem = [[UINavigationItem alloc] initWithTitle:@"Move and Scale"]; [aNavigationItem setLeftBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelCropping)] autorelease]]; [aNavigationItem setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(finishCropping)] autorelease]]; [navigationBar setItems:[NSArray arrayWithObject:aNavigationItem]]; [aNavigationItem release]; [[self view] addSubview:navigationBar]; [navigationBar release]; } return self;}- (void)cancelCropping { [delegate imageCropperDidCancel:self]; }- (void)finishCropping { float zoomScale = 1.0 / [scrollView zoomScale]; CGRect rect; rect.origin.x = [scrollView contentOffset].x * zoomScale; rect.origin.y = [scrollView contentOffset].y * zoomScale; rect.size.width = [scrollView bounds].size.width * zoomScale; rect.size.height = [scrollView bounds].size.height * zoomScale; CGImageRef cr = CGImageCreateWithImageInRect([[imageView image] CGImage], rect); UIImage *cropped = [UIImage imageWithCGImage:cr]; CGImageRelease(cr); [delegate imageCropper:self didFinishCroppingWithImage:cropped];}- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return imageView;}- (void)dealloc { [imageView release]; [scrollView release]; [super dealloc];}@end
0 0
- UIIimage 图片的截图和压缩
- 截图和压缩图片
- 截图、生成指定大小的图片、压缩图片
- 图片裁剪 图片压缩 屏幕截图
- 图片的压缩和截取
- 图片的压缩和缩放
- 图片浏览和截图软件
- iOS截图和保存图片
- 截图片和保存图片
- gentoo设置最简单的截图和图片浏览功能
- Android ScrollView截图和图片保存到相册的方式
- 图片的一些压缩处理和操作
- android下的图片裁剪和压缩
- android图片的压缩和水印
- 图片的终极压缩和保存
- 图片的质量压缩和二次采样
- 图片的二次采样和压缩_lemonen
- 图片水印,图片裁剪和屏幕截图
- Xcode6 用企业级账号打包App没有plist文件
- #1 Two Sum
- 如何更好地给同事讲代码
- sublime3快捷键总结
- OnDragDropRelease 不能正常拖拽(拿不到对象)或者鼠标穿透无法拦截
- UIIimage 图片的截图和压缩
- php中\r \r\n \t的区别
- 关于开源项目SwipeMenuListView的使用详解
- Alcatraz在Xcode6.3.2版本不启动的解决
- Android自定义ListFragment
- Windows下,Netbeans使用C++的配置方法
- 第一天使用博客
- C# 新委托使用方法 Lambda表达式,运算符 =>
- qt和MySQL连接验证