2013-06-28 2 views
0

이미지에 텍스트 레이블을 추가 한 다음 텍스트가있는 이미지를 저장할 수있는 권한을 부여해야합니다. 문제는이 작업을 수행하는 방법에 대한 좋은 정보를 찾을 수 없다는 것입니다. 징후는 UIKit의 UIGraphicsBeginImageContext, UIGraphicsGetImageFromCurrentImageContextUIGraphicsEndImageContext을 사용하여 가리 킵니다. 찾고있는 올바른 방향인지 확실하지 않습니다. 이미지가 저장 될 때 축소되지 않도록해야합니다. 그들은 그들의 결의를 유지해야합니다.이미지에 텍스트 렌더링, 이미지를 최대 해상도로 저장 하시겠습니까?

나는 손실에 처해있다. 보거나 다음에 무엇을 시도 할 것인지에 대한 조언이나 도움은 매우 도움이 될 것입니다.

답변

1

보기 (서브 뷰 포함)에서 UIImage을 생성하는 방법입니다. 이미지가 UIImageView이라고 가정하고 의 하위보기로 UILabel에 사용자 텍스트를 추가합니다.

+(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; 
} 

현재 이미지 크기로보기의 크기를 사용합니다. 다른 크기로 만들려면 결과 이미지의 원하는 크기를 전달하고 을 적절하게 설정하면됩니다.

프로젝트에 QuartzCore 기초를 추가하고 .m 파일에 #import <QuartzCore/QuartzCore.h>을 추가해야합니다.

- (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들로부터의 출력 : 여기서

saveButtonTapped 방법에 대부분의 원본 영상의 것과 사이즈에 UIViewController 결과 이미지에서 해당 코드

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

관련 문제