從攝像頭或者是從相冊中讀取圖檔,需要通過UIImagePickerController類來實作,在使用UIImagePickerController時,需要是實作下面兩個協定
<uinavigationcontrollerdelegate,uiimagepickercontrollerdelegate>
1、從相冊中讀取圖檔
首先要執行個體化UIImagePickerController對象imagePicker,設定imagePicker的圖檔來源為UIImagePickerControllerSourceTypePhotoLibrary,表明目前圖檔的來源為使用者的相冊。以及設定圖檔是否可被編輯allowsEditing。
#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、從相冊中讀取圖檔
#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];
}
在使用者現則好圖檔後,會回調選擇結束的方法
-(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 ;
}
}
對圖檔進行壓縮
-(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格式互相轉換
- (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二進制存儲
image = [info objectForKey:@UIImagePickerControllerOriginalImage];
NSData *data;
if (UIImagePNGRepresentation(image) == nil) {
data = UIImageJPEGRepresentation(image, 1);
} else {
data = UIImagePNGRepresentation(image);
}
[fileManager createFileAtPath:[filePath stringByAppendingString:@/image.png] contents:data attributes:nil]; //将圖檔儲存為PNG格式
[fileManager createFileAtPath:[filePath stringByAppendingString:@/image.jpg] contents:data attributes:nil]; //将圖檔儲存為JPEG格式