2013-06-28 3 views
0

Мне нужно добавить текстовую метку к изображению, а затем дать пользователю возможность сохранить изображение с текстом на нем. Проблема в том, что я не могу найти никакой хорошей информации о том, как это сделать. Знаки указывают на использование UIKit's UIGraphicsBeginImageContext, UIGraphicsGetImageFromCurrentImageContext и UIGraphicsEndImageContext. Я даже не уверен, что это правильное направление для поиска. Мне нужно, чтобы изображения не уменьшались, когда они были сохранены. Они должны сохранить свое разрешение.Render Text на изображение, Сохранить изображение в полном разрешении?

Я в затруднении. Любые советы или помощь относительно того, где искать или что попробовать, были бы очень полезны.

ответ

1

Вот метод, который будет создавать 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 
+0

Я читал это в документации Apple ранее, прежде чем задал этот вопрос. Как создать изображение, которое является фактическим размером изображения, снятого с камеры? Это меня смущает, потому что это создаст что-то довольно маленькое на телефоне, нет? – Rob

+0

Или я неправильно интерпретирую, как этот метод обрабатывает захват данных/изображений? – Rob

+0

Просмотр, который вы передаете, не обязательно должен находиться на экране устройства, поэтому вы можете создать, например, 'UIImageView' с его размером, равным исходному изображению. Затем добавьте свой 'UILabel' в качестве подзаголовка. Сделайте это «выключено» после того, как пользователь указывает, что помеченное изображение должно быть сохранено. – bobnoble