IOS 圖片上傳處理 圖片壓縮 圖片處理

提到從攝像頭/相冊獲取圖片是面向終端用戶的,由用戶去瀏覽并選擇圖片為程序使用。在這里,我們需要過UIImagePickerController類來和用戶交互。

使用UIImagePickerController和用戶交互,我們需要實現(xiàn)2個協(xié)議。

View Code

代碼如下復制代碼

#pragma mark從用戶相冊獲取活動圖片

- (void)pickImageFromAlbum

{

imagePicker = [[UIImagePickerController alloc] init];

imagePicker.delegate =self;

imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

imagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

imagePicker.allowsEditing =YES;

[selfpresentModalViewController: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;

[selfpresentModalViewController: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;//自定義照片樣式

[selfpresentViewController:pickerImage animated:YEScompletion: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 = [selfimageWithImage: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.

returnnewImage;

}

圖片保存到本地document里面--以及圖片格式的轉換

IOS開發(fā)之保存圖片到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];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容