天天看點

iOS本地相冊 攝像頭

從攝像頭或者是從相冊中讀取圖檔,需要通過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格式