Вот метод, который будет создавать UIImage
из представления (включая его подвид). Предполагая, что изображение находится в UIImageView
, добавьте текст пользователя в UILabel
в качестве подсмотра UIImageView
.
+(UIImage *)imageFromView:(UIView *)view{
// On iOS 4 and later, use UIGraphicsBeginImageContextWithOptions to take the scale into consideration
// On iOS prior to 4, fall back to use UIGraphicsBeginImageContext
CGSize imageSize = view.bounds.size;
if (NULL != UIGraphicsBeginImageContextWithOptions)
UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);
else
UIGraphicsBeginImageContext(imageSize);
CGContextRef context = UIGraphicsGetCurrentContext();
[view.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
return image;
}
В настоящее время он использует размер изображения в увеличенном размере. Если вы хотите, чтобы он был другого размера, вы можете передать желаемый размер полученного изображения и установить imageSize
, если необходимо.
Вам нужно будет добавить основу QuartzCore в свой проект и добавить #import <QuartzCore/QuartzCore.h>
в ваш .m файл.
Здесь применяется код в UIViewController
к размеру результирующего изображения к тому из исходного изображения, большинство из которых находится в saveButtonTapped
метода:
- (void)viewDidLoad
{
[super viewDidLoad];
sourceImage = [UIImage imageNamed:@"animal"];
self.onScreenImageView.image = sourceImage;
}
-(void)viewWillAppear:(BOOL)animated{
NSLog(@"Source image size: %0.0f x %0.0f", sourceImage.size.width, sourceImage.size.height);
NSLog(@"onScreenImageView size: %0.0f x %0.0f", self.onScreenImageView.frame.size.width, self.onScreenImageView.frame.size.height);
}
- (IBAction)saveButtonTapped:(id)sender {
UIImageView *offScreenImageView = [[UIImageView alloc] initWithImage:sourceImage];
NSLog(@"offScreenImageView size: %0.0f x %0.0f", offScreenImageView.frame.size.width, offScreenImageView.frame.size.height);
UILabel *offScreenLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 1000, 100)];
offScreenLabel.font = [UIFont systemFontOfSize:80.f];
offScreenLabel.textColor = [UIColor blackColor];
offScreenLabel.text = @"User Image Label Text";
[offScreenImageView addSubview:offScreenLabel];
UIImage *labeledImage = [NAHLabelPictureVC imageFromView:offScreenImageView];
NSLog(@"Labeled image size: %0.0f x %0.0f", labeledImage.size.width, labeledImage.size.height);
self.labeledImageView.image = labeledImage;
}
И выход из NSLog
с:
2013-06-28 15:57:13.052 SOSandbox[28772:907] Source image size: 1213 x 1159
2013-06-28 15:57:13.055 SOSandbox[28772:907] onScreenImageView size: 200 x 200
2013-06-28 15:57:14.963 SOSandbox[28772:907] offScreenImageView size: 1213 x 1159
2013-06-28 15:57:14.992 SOSandbox[28772:907] Labeled image size: 1213 x 1159
Я читал это в документации Apple ранее, прежде чем задал этот вопрос. Как создать изображение, которое является фактическим размером изображения, снятого с камеры? Это меня смущает, потому что это создаст что-то довольно маленькое на телефоне, нет? – Rob
Или я неправильно интерпретирую, как этот метод обрабатывает захват данных/изображений? – Rob
Просмотр, который вы передаете, не обязательно должен находиться на экране устройства, поэтому вы можете создать, например, 'UIImageView' с его размером, равным исходному изображению. Затем добавьте свой 'UILabel' в качестве подзаголовка. Сделайте это «выключено» после того, как пользователь указывает, что помеченное изображение должно быть сохранено. – bobnoble