IOS 图片上传处理 图片压缩 图片处理
提到從攝像頭/相冊獲取圖片是面向終端用戶的,由用戶去瀏覽并選擇圖片為程序使用。在這里,我們需要過UIImagePickerController類來和用戶交互。
使用UIImagePickerController和用戶交互,我們需要實現2個協議<UIImagePickerControllerDelegate,UINavigationControllerDelegate>。
View Code
代碼如下復制代碼
#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];
?
?
?
轉載于:https://www.cnblogs.com/jiangu66/p/3246612.html
總結
以上是生活随笔為你收集整理的IOS 图片上传处理 图片压缩 图片处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ListView 与 它里面的Item
- 下一篇: IOS学习之路七(使用 Operatio