iOS开发之压缩,上传图片
2016-01-20 14:54
477 查看
提到从摄像头/相册获取图片是面向终端用户的,由用户去浏览并选择图片为程序使用。在这里,我们需要过UIImagePickerController类来和用户交互。
使用UIImagePickerController和用户交互,我们需要实现2个协议
我们来看看上面的从相册获取图片,我们首先要实例化UIImagePickerController对象,然后设置imagePicker对象为当前对象,设置imagePicker的图片来源为UIImagePickerControllerSourceTypePhotoLibrary,表明当前图片的来源为相册,除此之外还可以设置用户对图片是否可编辑。
View Code
代码如下 复制代码
//打开相机
以上是从摄像头获取图片,和从相册获取图片只是图片来源的设置不一样,摄像头图片的来源为UIImagePickerControllerSourceTypeCamera。
在和用户交互之后,用户选择好图片后,会回调选择结束的方法。
//对图片尺寸进行压缩–
图片保存到本地document里面–以及图片格式的转换
IOS开发之保存图片到Documents目录及PNG,JPEG格式相互转换
上面的代码是当从相册里面选取图片之后保存到本地程序沙盒,在上面我们得到的图片中不能够得到图片名字,以及不清楚图片格式,所以这个时候我们需要将其转换成NSdata二进制存储,
UIImagePNGRepresentation转换PNG格式的图片为二进制,如果图片的格式为JPEG则返回nil;
[fileManager createFileAtPath:[filePath stringByAppendingString:@”/image.png”] contents:data attributes:nil]; 将图片保存为PNG格式
[fileManager createFileAtPath:[filePath stringByAppendingString:@”/image.jpg”] contents:data attributes:nil];
将图片保存为JPEG格式
我们也可以写成下面的格式存储图片
使用UIImagePickerController和用户交互,我们需要实现2个协议
pragma mark 从用户相册获取活动图片
- (void)pickImageFromAlbum { imagePicker = [[UIImagePickerController alloc] init]; imagePicker.delegate =self; imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; imagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVertical; imagePicker.allowsEditing =YES; [self presentModalViewController:imagePicker animated:YES]; }
我们来看看上面的从相册获取图片,我们首先要实例化UIImagePickerController对象,然后设置imagePicker对象为当前对象,设置imagePicker的图片来源为UIImagePickerControllerSourceTypePhotoLibrary,表明当前图片的来源为相册,除此之外还可以设置用户对图片是否可编辑。
View Code
代码如下 复制代码
pragma mark 从摄像头获取活动图片
- (void)pickImageFromCamera { imagePicker = [[UIImagePickerController alloc] init]; imagePicker.delegate =self; imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVertical; imagePicker.allowsEditing =YES; [self presentModalViewController:imagePicker animated:YES]; }
//打开相机
- (IBAction)touch_photo:(id)sender { // for iphone UIImagePickerController *pickerImage = [[UIImagePickerController alloc] init]; if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { pickerImage.sourceType = UIImagePickerControllerSourceTypeCamera; pickerImage.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:pickerImage.sourceType]; } pickerImage.delegate =self; pickerImage.allowsEditing =YES;//自定义照片样式 [self presentViewController:pickerImage animated:YES completion:nil]; }
以上是从摄像头获取图片,和从相册获取图片只是图片来源的设置不一样,摄像头图片的来源为UIImagePickerControllerSourceTypeCamera。
在和用户交互之后,用户选择好图片后,会回调选择结束的方法。
-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info { //初始化imageNew为从相机中获得的-- UIImage *imageNew = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; //设置image的尺寸 CGSize imagesize = imageNew.size; imagesize.height =626; imagesize.width =413; //对图片大小进行压缩-- imageNew = [self imageWithImage:imageNew scaledToSize:imagesize]; NSData *imageData = UIImageJPEGRepresentation(imageNew,0.00001); if(m_selectImage==nil) { m_selectImage = [UIImage imageWithData:imageData]; NSLog(@"m_selectImage:%@",m_selectImage); [self.TakePhotoBtn setImage:m_selectImage forState:UIControlStateNormal]; [picker dismissModalViewControllerAnimated:YES]; return ; } [picker release]; }
//对图片尺寸进行压缩–
-(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize { // Create a graphics image context UIGraphicsBeginImageContext(newSize); // Tell the old image to draw in this new context, with the desired // new size [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; // Get the new image from the context UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); // End the context UIGraphicsEndImageContext(); // Return the new image. return newImage; }
图片保存到本地document里面–以及图片格式的转换
IOS开发之保存图片到Documents目录及PNG,JPEG格式相互转换
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary*)info { NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; if ([mediaType isEqualToString:@"public.image"]){ image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; NSData *data; if (UIImagePNGRepresentation(image) == nil) { data = UIImageJPEGRepresentation(image, 1); } else { data = UIImagePNGRepresentation(image); } NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *filePath = [NSString stringWithString:[self getPath:@"image1"]]; //将图片存储到本地documents [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil]; [fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.png"] contents:dataattributes:nil]; UIImage *editedImage = [[UIImage alloc] init]; editedImage = image; CGRect rect = CGRectMake(0, 0, 64, 96); UIGraphicsBeginImageContext(rect.size); [editedImage drawInRect:rect]; editedImage = UIGraphicsGetImageFromCurrentImageContext(); UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom]; imageButton.frame = CGRectMake(10, 10, 64, 96); [imageButton setImage:editedImage forState:UIControlStateNormal]; [self.view addSubview:imageButton]; [imageButton addTarget:self action:@selector(imageAction:)forControlEvents:UIControlEventTouchUpInside]; [ipc dismissModalViewControllerAnimated:YES]; } else { NSLog(@"MEdia"); }
上面的代码是当从相册里面选取图片之后保存到本地程序沙盒,在上面我们得到的图片中不能够得到图片名字,以及不清楚图片格式,所以这个时候我们需要将其转换成NSdata二进制存储,
image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; NSData *data; if (UIImagePNGRepresentation(image) == nil) { data = UIImageJPEGRepresentation(image, 1); } else { data = UIImagePNGRepresentation(image); }
UIImagePNGRepresentation转换PNG格式的图片为二进制,如果图片的格式为JPEG则返回nil;
[fileManager createFileAtPath:[filePath stringByAppendingString:@”/image.png”] contents:data attributes:nil]; 将图片保存为PNG格式
[fileManager createFileAtPath:[filePath stringByAppendingString:@”/image.jpg”] contents:data attributes:nil];
将图片保存为JPEG格式
我们也可以写成下面的格式存储图片
NSString *pngImage = [filePath stringByAppendingPathComponent:@"Documents/image.png"]; NSString *jpgImage = [filePath stringByAppendingPathComponent:@"Documents/image.jpg"]; [data writeToFile:pngImage atomically:YES]; [data writeToFile:jpgImage atomically:YES];
相关文章推荐
- xcode7 真机调试ios7 出错(there was an internal api error)
- ios无线轮播图
- iOS webView与H5的交互(返回页面的处理)
- 倒计时按钮,iOS
- 给iOS开发新手送点福利,简述文本属性Attributes的用法
- IOS-学习笔记(3)
- iOS解决两个静态库的冲突 duplicate symbol
- iOS常用---NSArray,NSMutabuleArray
- iOS-手绘点(类似分段选择器下方突出的小三角)
- iOS开发 [SY_InformationController respondsToSelector:]: message sent to deallocated崩溃信息
- IOS 与 Android WebView 中 JS 调用原生代码
- iOS语法小结---豁然开朗
- IOS-多线程(NSOperation)
- iOS-IM From XMPP.2 工程配置、#import <libxml/tree.h>、 @import libxmlSimu 错误处理
- iOS-IM From XMPP.1 初识XMPP
- ios中view和view的传值(NSUserDefaults和通知中心)
- iOS Debug日志 约束问题
- iOS时间戳与日期互转
- IOS开发者必看的105个全球最佳博客
- iOS 学习框架图