iPhone, jak nakładać jeden obraz na drugi, aby utworzyć nowy obraz do zapisania? (znak wodny)
Zasadniczo chcę zrobić zdjęcie, które użytkownik wybiera ze swojej biblioteki zdjęć, a następnie zastosować znak wodny, Trójkąt W prawym dolnym rogu, który ma nazwę aplikacji na nim. Mam już drugi obraz z przezroczystą warstwą w Photoshopie.
Próbowałem funkcji, której dokładnej nazwy nie pamiętam, ale dotyczyła CGIImages i masek. Łączy to dwa obrazy, ale jako maskę, która sprawiła, że obraz ciemniejszy tam, gdzie była przezroczysta warstwa, a obrazy nie zostały połączone sam w sobie, tylko zamaskowany.
Jak sprawić, aby obraz ze znakiem wodnym połączył się z innym obrazem, aby utworzyć interfejs, bez wyświetlania obrazów na ekranie?
Dziękuję.
3 answers
To całkiem proste:
UIImage *backgroundImage = [UIImage imageNamed:@"image.png"];
UIImage *watermarkImage = [UIImage imageNamed:@"watermark.png"];
UIGraphicsBeginImageContext(backgroundImage.size);
[backgroundImage drawInRect:CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height)];
[watermarkImage drawInRect:CGRectMake(backgroundImage.size.width - watermarkImage.size.width, backgroundImage.size.height - watermarkImage.size.height, watermarkImage.size.width, watermarkImage.size.height)];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Jeśli chcesz, aby tło i znak wodny były tego samego rozmiaru, użyj tego kodu
...
[backgroundImage drawInRect:CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height)];
[watermarkImage drawInRect:CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height)];
...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-08 20:05:46
Rozwiązanie dostarczone przez omz działa również w Swift , tak:
let backgroundImage = UIImage(named: "image.png")
let watermarkImage = UIImage(named: "watermark.png")
UIGraphicsBeginImageContextWithOptions(backgroundImage.size, false, 0.0)
backgroundImage.drawInRect(CGRect(0.0, 0.0, backgroundImage.size.width, backgroundImage.size.height))
watermarkImage.drawInRect(CGRect(backgroundImage.size.width - watermarkImage.size.width, backgroundImage.size.height - watermarkImage.size.height, watermarkImage.size.width, watermarkImage.size.height))
let result = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-16 10:10:11
Możesz użyć tej metody, która jest bardzo dynamiczna i możesz określić pozycję początkową drugiego obrazu i całkowity Rozmiar obrazu.
-(UIImage *) addImageToImage:(UIImage *)img withImage2:(UIImage *)img2 andRect:(CGRect)cropRect withImageWidth:(int) width{
CGSize size = CGSizeMake(width,40);
UIGraphicsBeginImageContext(size);
CGPoint pointImg1 = CGPointMake(0,0);
[img drawAtPoint:pointImg1];
CGPoint pointImg2 = cropRect.origin;
[img2 drawAtPoint: pointImg2];
UIImage* result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return result;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-06 19:58:28