iOS图片上传及处理
2023-09-27 14:28:41 时间
从摄像头或者是从相册中读取图片,需要通过UIImagePickerController类来实现,在使用UIImagePickerController时,需要是实现下面两个协议
1
|
<uinavigationcontrollerdelegate,uiimagepickercontrollerdelegate></uinavigationcontrollerdelegate,uiimagepickercontrollerdelegate> |
1、从相册中读取图片
首先要实例化UIImagePickerController对象imagePicker,设置imagePicker的图片来源为UIImagePickerControllerSourceTypePhotoLibrary,表明当前图片的来源为用户的相册。以及设置图片是否可被编辑allowsEditing。
1
2
3
4
5
6
7
8
9
10
11
|
#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]; } |
2、从相册中读取图片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#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]; } |
在用户现则好图片后,会回调选择结束的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
-( 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.takePhotoButton setImage:m_selectImage forState:UIControlStateNormal]; [picker dismissModalViewControllerAnimated:YES]; return ; } } |
对图片进行压缩
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
-(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; } |
将图片保存到Documents目录及PNG、JPEG格式相互转换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
- ( 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]; [self dismissModalViewControllerAnimated:YES]; } else { NSLog( @Media ); } |
在上面的方法中不能得到图片的名称及格式,所以需要将其转换成NSData二进制存储
1
2
3
4
5
6
7
|
image = [info objectForKey: @UIImagePickerControllerOriginalImage ]; NSData *data; if (UIImagePNGRepresentation(image) == nil) { data = UIImageJPEGRepresentation(image, 1 ); } else { data = UIImagePNGRepresentation(image); } |
1
2
|
[fileManager createFileAtPath:[filePath stringByAppendingString:@/image.png] contents:data attributes:nil]; //将图片保存为PNG格式 [fileManager createFileAtPath:[filePath stringByAppendingString:@/image.jpg |
相关文章
- 微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题
- 传微软欲收购Xamarin:未来有望通过VS开发iOS和Android应用?
- 《iOS 9应用开发入门经典(第7版)》——第1章,第1.4节开发技术概述
- iOS游戏开发之使用 Spritekit 框架和 Swift 的 iOS 2D 太空射击游戏(教程含源码)
- SwiftUI iOS 精品项目之时钟秒表Clock项目(教程含源码)
- iOS NSDate等时间类的使用
- iOS 网络编程 TCP/UDP HTTP
- javascript js date ios手机浏览器出现 NAN的问题解决方法
- IOS APP报错:SyntaxError: Invalid regular expression: invalid group specifier name __ERROR
- iOS 开发-教大家如何使用github客户端上传自己的代码到github网站
- iOS - OC/Swift:验证手机号/固话用正则表达式
- iOS The nullability qualifiers (为空性修饰符)
- iOS 4种方法显示GIF