Iphonesdk объединить три изображения два изображения - PullRequest
6 голосов
/ 21 августа 2011

Я работаю над приложением для iPhone, где мне нужно объединить три изображения и сделать их одним изображением. Я имею в виду, что у меня есть фоновое изображение, изображение заголовка и нижнее изображение, мне нужно объединить все это, чтобы сделать одно изображение, чтобы я мог использовать его для публикации в Facebook. спасибо.

* EDIT * я знаю этот код для двух изображений, но как я могу использовать его для трех изображений:

UIGraphicsBeginImageContext(saveView.bounds.size);
[saveView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Ответы [ 2 ]

10 голосов
/ 21 августа 2011

Вы можете просто выровнять их вместе в одном UIView (я думаю, что даже за кадром, но я еще не проверил) - и затем просто преобразовать этот UIView в UIImage, используя QuartzCode:

UIGraphicsBeginImageContext(myView.bounds.size);
[myView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Затем преобразуйте это в формат, такой как PNG, например:

NSData *imageData = UIImagePNGRepresentation(image);

Тогда отправка не должна быть слишком сложной.

EDIT Вот расширенный пример, который вы также можете увидеть для 3 изображений - вы, конечно, можете использовать Interface Builder и Outlets вместо того, чтобы писать все это - но вы можете скопировать и вставить это, чтобы попробовать:

UIImageView *imgView1, *imgView2, *imgView3;
imgView1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1"]];
imgView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image2"]];
imgView3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image3"]];

imgView1.frame = CGRectMake(0, 0, 50, 50);
imgView2.frame = CGRectMake(50, 50, 100, 100);
imgView3.frame = CGRectMake(100, 100, 200, 200);

[referenceView addSubview:imgView1];
[referenceView addSubview:imgView2];
[referenceView addSubview:imgView3];

UIGraphicsBeginImageContext(referenceView.bounds.size);
[referenceView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

resultView = [[UIImageView alloc] initWithImage:finalImage];
resultView.frame = CGRectMake(0, 0, 320, 480);
[self.view addSubview:resultView];

referenceView.hidden = YES; 

Примечание Я проверил, и UIView должен быть отображаемым / видимым во время вызова renderInContext (он может быть вне экрана, но не может быть скрыт или альфа = 0, потому что тогда он будет сделан невидимым). Так что либо выведите его за экран, либо сразу спрячьте после рисования

2 голосов
/ 23 октября 2012

Ответ Шейна мне помог, но я обнаружил, что мне не нужно было добавлять UIView к основному представлению, чтобы отобразить его.Вот пример добавления текста к изображению ...

    UIImage *image = [UIImage imageNamed:@"toolbar_icon"]; // image is 20 x 20 .png

    UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
    [tempView addSubview:[[UIImageView alloc] initWithImage:image]];

    UILabel *label = [[UILabel alloc] initWithFrame:tempView.frame];
    [label setText:[NSString stringWithFormat:@"%d", [self countValue]]];
    [label setFont:[UIFont systemFontOfSize:22.0]];
    [label setTextColor:[UIColor lightTextColor]];
    [label setTextAlignment:UITextAlignmentCenter];
    [label setBackgroundColor:[UIColor clearColor]];
    [tempView addSubview:label];

    UIGraphicsBeginImageContext(tempView.bounds.size);
    [tempView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    UIBarButtonItem *countItem = [[UIBarButtonItem alloc] initWithImage:finalImage
                                                                       style:UIBarButtonItemStyleBordered
                                                                      target:self
                                                                      action:@selector(countAction:)];

ПРИМЕЧАНИЕ. Я неожиданно осознал, что мой ответ включает добавление метки к изображению, что я пытался сделать, прежде чем найти это.Ссылка Объединить текст метки с изображением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...