2011-08-11 19 views
25

Về cơ bản, tôi muốn chụp một hình ảnh mà người dùng chọn từ thư viện ảnh của họ và sau đó áp dụng hình mờ, hình tam giác ở phía dưới bên phải có tên ứng dụng trên đó. Tôi có hình ảnh thứ hai đã được thực hiện với một lớp trong suốt trong photoshop.iPhone, làm cách nào để phủ một hình ảnh lên hình ảnh khác để tạo hình ảnh mới để lưu? (watermark)

Tôi đã thử một chức năng, mà tôi không thể nhớ chính xác tên, nhưng nó liên quan đến CGIImages và mặt nạ. Điều này kết hợp hai hình ảnh, nhưng như là một mặt nạ, làm cho hình ảnh tối hơn, nơi lớp trong suốt và các hình ảnh không được sáp nhập trên mỗi giây, chỉ cần che dấu.

Tôi làm cách nào để hình ảnh hình mờ được hợp nhất với một hình ảnh khác, tạo thành UIImage mà không hiển thị hình ảnh trên màn hình?

Cảm ơn bạn.

+0

thể trùng lặp của [Tạo một UIImage từ hai UIImages khác trên iPhone] (http: // stackoverflow.com/questions/679245/create-a-uiimage-from-two-other-uiimages-on-the-iphone) –

Trả lời

76

Nó khá dễ dàng:

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(); 

Nếu bạn muốn nền và watermark phải có cùng kích thước sau đó sử dụng mã này

... 
[backgroundImage drawInRect:CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height)]; 
[watermarkImage drawInRect:CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height)]; 
... 
+2

Làm việc hoàn hảo! Bạn nói đúng, đó là khá dễ dàng. Cảm ơn bạn rất nhiều vì sự giúp đỡ! – SolidSnake4444

+0

Tốt hơn nên sử dụng UIGraphicsBeginImageContextWithOptions thay cho UIGraphicsBeginImageContext để bảo toàn chất lượng hình ảnh trên màn hình hiển thị võng mạc. Xem http://stackoverflow.com/questions/4334233/how-to-capture-uiview-to-uiimage-without-loss-of-quality-on-retina-display để biết thêm thông tin. –

+0

Bạn thưa ông bánh! Đây là một giải pháp tuyệt vời. Tôi có nhu cầu tương tự và bạn đã cứu tôi rất nhiều thời gian. – Jordan

1

Bạn có thể sử dụng phương pháp này, đó là rất năng động và bạn có thể chỉ định vị trí bắt đầu của hình ảnh thứ hai và tổng kích thước của hình ảnh.

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

} 
7

Các giải pháp được cung cấp bởi OMZ cũng hoạt động trong Swift, như vậy:

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()