2013-12-07 2 views
0

Я делаю фотографию в xcode с помощью пользовательской камеры. Вместо того, чтобы изображение было нормального размера, я хотел бы обрезать его до квадрата. У меня есть код, который, как я думаю, должен работать, но вместо обрезки он сжимает изображение. Что происходит не так? Заранее спасибо!Создание изображения квадрат

Вот код, я использую, чтобы обрезать изображение:

self.thumbImage = [self.photoImage resizedImageWithContentMode:UIViewContentModeScaleAspectFit 
                    bounds:CGSizeMake(320.0f, 320.0f) 
                interpolationQuality:kCGInterpolationHigh]; 
+0

Я не знаком с этим методом (должен быть из вашей собственной категории). Я использую следующую категорию, которая, когда я называю 'scaleImageToSizeAspectFill' или' scaleImageToSizeAspectFit', не приводит к искажениям: http://stackoverflow.com/a/10491692/1271826 – Rob

+0

Вы хотите сохранить это изображение обрезанным или вы просто отобразит его в UIImageView? –

+0

сохранить изображение обрезанное @HaniIbrahim – matthew

ответ

0

Проверить эту ссылку https://stackoverflow.com/a/712553/1722480

Все, что вам нужно, это получить ваш cropRect, а затем использовать CGImageCreateWithImageInRect метод

UIImage *image = [UIImage imageNamed:@"4.png"]; 
CGRect cropRect; 
if (image.size.width > image.size.height) { 
    // Landscape Image 
    cropRect = CGRectMake((image.size.width-image.size.height)/2.0, 0, image.size.height, image.size.height); 
} else { 
    // Portrait Image 
    cropRect = CGRectMake(0, (image.size.height-image.size.width)/2.0, image.size.width, image.size.width); 
} 

// Crop Image 
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect); 
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef); 

// Save Image 
NSData *imageData = UIImagePNGRepresentation(croppedImage); 
NSString *documentFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
[imageData writeToFile:[documentFolder stringByAppendingPathComponent:@"croppedImage.png"] atomically:YES]; 
+0

Спасибо, это сработало отлично. Мой единственный вопрос заключается в том, есть ли способ улучшить качество изображения. Теперь форма правильная, но качество действительно плохое – matthew

0

Если вы просто хотите, чтобы дисплей фото на экране обрезается на квадрат, добавьте этот код,

imageView.layer.maskToBounds = YES; 

Где ImageView имя, которое вы дали свой объект ImageView, и вы установите его в качестве квадрата. Вам нужно будет добавить это в файл заголовка

#import <QuartzCore/QuartzCore.h> 

Я надеюсь, что это помогает,

Приветствия Джим.

+0

не нужно использовать слой. [UIView's 'clipsToBounds'] (https://developer.apple.com/Library/ios/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW60) следует дают вам те же результаты. – vikingosegundo

Смежные вопросы