2011-08-11 9 views
25

असल में मैं एक ऐसी छवि लेना चाहता हूं जिसे उपयोगकर्ता अपनी फोटो लाइब्रेरी से चुनता है और उसके बाद वॉटरमार्क, निचले दाएं हिस्से में एक त्रिकोण लागू करता है जिसमें ऐप का नाम होता है। मेरे पास फ़ोटोशॉप में एक पारदर्शी परत के साथ पहले से बनाई गई दूसरी छवि है।आईफोन, सहेजने के लिए एक नई छवि बनाने के लिए एक छवि को एक छवि पर कैसे ओवरले करता है? (वॉटरमार्क)

मैंने एक समारोह की कोशिश की, जिसे मुझे सही नाम याद नहीं है, लेकिन इसमें CGIImages और मास्क शामिल हैं। यह दो छवियों को जोड़ता है, लेकिन एक मुखौटा के रूप में, जिसने छवि को गहरा बनाया जहां पारदर्शी परत थी और छवियों को प्रतिलिपि नहीं किया गया था, बस मुखौटा।

स्क्रीन पर छवियों को प्रदर्शित किये बिना, यूआईएममेज बनाने के लिए, मुझे वॉटरमार्क छवि को दूसरी छवि के साथ विलय करने के लिए कैसे मिलेगा?

धन्यवाद।

+0

की (http [iPhone पर दो अन्य UIImages से एक UIImage बनाएं] संभव डुप्लिकेट: // stackoverflow.com/questions/679245/create-a-uiimage-from-two-other-uiimages-on-the-iphone) –

उत्तर

76

यह बहुत आसान है:

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

आप पृष्ठभूमि और वॉटरमार्क चाहते हैं एक ही आकार के होने के लिए तो यह कोड

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

पूरी तरह से काम किया! तुम सही हो, वह बहुत आसान था। मदद के लिए बहुत - बहुत धन्यवाद! – SolidSnake4444

+0

रेटिना डिस्प्ले पर छवि गुणवत्ता को संरक्षित करने के लिए UIGraphicsBeginImageContext के बजाय UIGraphicsBeginImageContextWithOptions का उपयोग करना बेहतर है। अधिक जानकारी के लिए http://stackoverflow.com/questions/4334233/how-to-capture-uiview-to-uiimage-without-loss-of-quality-on-retina- डिस्प्ले देखें। –

+0

आप सर केक लायक हैं! यह एक उत्कृष्ट समाधान है। मेरे पास एक ही ज़रूरत है और आपने मुझे बहुत समय बचा लिया है। – Jordan

1

आप इस पद्धति है, जो बहुत गतिशील है उपयोग कर सकते हैं का उपयोग करें और आप दूसरी छवि की प्रारंभिक स्थिति और छवि के कुल आकार को निर्दिष्ट कर सकते हैं।

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

समाधान OMZ द्वारा प्रदान की भी तरह, स्विफ्ट में काम करता है:

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() 
संबंधित मुद्दे