Я хотел бы попробовать некоторые функции фильтра изображений на iPhone, как это делает Instagram. Я использую imagePickerController, чтобы получить фото с камеры. Я понимаю, что изображение, возвращаемое imagePickerController, было уменьшено для экономии памяти. И нецелесообразно загружать исходное изображение в UIImage. Но как я могу обработать изображение, а затем сохранить его в исходных пикселях? Я использую iPhone 4S в качестве устройства для разработки.
Исходное фото в фотопленке — 3264 *2448.
Изображение, возвращаемое UIImagePickerControllerOriginalImage, равно 1920 *1440
. Изображение, возвращаемое UIImagePickerControllerEditedImage, равно 640 *640
. imageViewOld (используйте UIImagePickerControllerCropRect [80,216,1280,1280], чтобы обрезать изображение, возвращаемое UIImagePickerControllerOriginalImage ), равно 1280 *1224
imageViewNew (используйте UIImagePickerControllerCropRect [80,216,2560,2560] двойного размера, чтобы обрезать изображение, возвращаемое UIImagePickerControllerOriginalImage )равно 1840 *1224.
Я проверяю ту же фотографию в инстаграме 1280 *1280
Мои вопросы:
Почему UIImagePickerControllerEditedImage не возвращает изображение к 1280 *1280? Как
UIImagePickerControllerCropRect показывает, что он обрезан на 1280 *1280 квадратов?
Как я могу сделать квадратную обрезку исходной фотографии, чтобы получить изображение 2448 *2448?
Заранее спасибо. Ниже мой код:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:@"public.image"])
{
UIImage *imageEdited = [info objectForKey:UIImagePickerControllerEditedImage];
UIImage *imagePicked = [info objectForKey:UIImagePickerControllerOriginalImage];
CGRect cropRect;
cropRect = [[info valueForKey:@"UIImagePickerControllerCropRect"] CGRectValue];
NSLog(@"Original width = %f height= %f ",imagePicked.size.width, imagePicked.size.height);
//Original width = 1440.000000 height= 1920.000000
NSLog(@"imageEdited width = %f height = %f",imageEdited.size.width, imageEdited.size.height);
//imageEdited width = 640.000000 height = 640.000000
NSLog(@"corpRect %f %f %f %f", cropRect.origin.x, cropRect.origin.y, cropRect.size.width, cropRect.size.height);
//corpRect 80.000000 216.000000 1280.000000 1280.000000
CGRect rectNew = CGRectMake(cropRect.origin.x, cropRect.origin.y, cropRect.size.width*2, cropRect.size.height*2);
CGRect rectOld = CGRectMake(cropRect.origin.x, cropRect.origin.y, cropRect.size.width, cropRect.size.height);
CGImageRef imageRefNew = CGImageCreateWithImageInRect([imagePicked CGImage], rectNew);
CGImageRef imageRefOld = CGImageCreateWithImageInRect([imagePicked CGImage], rectOld);
UIImageView *imageViewNew = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:imageRefNew]];
CGImageRelease(imageRefNew);
UIImageView *imageViewOld = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:imageRefOld]];
CGImageRelease(imageRefOld);
NSLog(@"imageViewNew width = %f height = %f",imageViewNew.image.size.width, imageViewNew.image.size.height);
//imageViewNew width = 1840.000000 height = 1224.000000
NSLog(@"imageViewOld width = %f height = %f",imageViewOld.image.size.width, imageViewOld.image.size.height);
//imageViewOld width = 1280.000000 height = 1224.000000
UIImageWriteToSavedPhotosAlbum(imageEdited, nil, nil, NULL);
UIImageWriteToSavedPhotosAlbum([imageViewNew.image imageRotatedByDegrees:90.0], nil, nil, NULL);
UIImageWriteToSavedPhotosAlbum([imageViewOld.image imageRotatedByDegrees:90.0], nil, nil, NULL);
//assign the image to an UIImage Control
self.imageV.contentMode = UIViewContentModeScaleAspectFit;
self.imageV.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.width);
self.imageV.image = imageEdited;
}
[self dismissModalViewControllerAnimated:YES];
}