2011-11-15 11 views
6

पर किसी छवि पर टेक्स्ट जोड़ना मैं कुछ ग्रीटिंग कार्ड एप्लिकेशन के समान एक आईफोन एप्लिकेशन बनाना चाहता हूं, जहां मैं कुछ पूर्व तैयार पृष्ठभूमि छवियों (कार्ड) पर टेक्स्ट लिख सकता हूं।एक्सकोड

  • मैं इस पाठ लिख सकते हैं?
  • पृष्ठभूमि छवि को सहेजने के लिए कैसे + एक छवि फ़ाइल पर पाठ?

धन्यवाद।

+1

कोर ग्राफिक्स सही दिशा हो सकता है। – dasdom

+1

आप स्टेटस बार के साथ एक खाली नियंत्रक बना सकते हैं और समाप्त संपादन के बाद एक स्क्रीनशॉट बना सकते हैं। मुझे लगता है कि UIImagePNGRresentmentation है जिसके लिए आपको इसकी आवश्यकता है। –

+0

आपके उत्तरों के लिए धन्यवाद। हां, मुझे लगता है कि कोर ग्राफिक्स का उपयोग करने से आपका समाधान अधिक आसान है, मैं उस पर ध्यान केंद्रित करूंगा। अगर मैं समझता हूं, तो आपका मतलब है कि मैं यूवीव्यू पर पृष्ठभूमि छवि तैयार करता हूं और उस पर पारदर्शी बैचग्राउंड के साथ एक यूईटेक्स्टफील्ड जोड़ता हूं, उपयोगकर्ता को पाठ इनपुट करने दें और फिर एक स्रीनसशॉट बनाएं। क्या यह हो सकता है? – hafedh

उत्तर

10

यहां एक विधि है जो एक छवि में स्ट्रिंग को जलती है। आप फ़ॉन्ट पसंद और अन्य पैरामीटर को अपनी पसंद के अनुसार कॉन्फ़िगर करने के लिए ट्विक कर सकते हैं।

/* Creates an image with a home-grown graphics context, burns the supplied string into it. */ 
- (UIImage *)burnTextIntoImage:(NSString *)text :(UIImage *)img { 

UIGraphicsBeginImageContext(img.size); 

CGRect aRectangle = CGRectMake(0,0, img.size.width, img.size.height); 
[img drawInRect:aRectangle]; 

[[UIColor redColor] set];   // set text color 
NSInteger fontSize = 14; 
if ([text length] > 200) { 
    fontSize = 10; 
} 
UIFont *font = [UIFont boldSystemFontOfSize: fontSize];  // set text font 

[ text drawInRect : aRectangle      // render the text 
     withFont : font 
    lineBreakMode : UILineBreakModeTailTruncation // clip overflow from end of last line 
     alignment : UITextAlignmentCenter ]; 

UIImage *theImage=UIGraphicsGetImageFromCurrentImageContext(); // extract the image 
UIGraphicsEndImageContext();  // clean up the context. 
return theImage; 
} 
+0

धन्यवाद Rayfleck, बहुत अच्छा लग रहा है! – hafedh

+0

@ रेफलेक मुझे पता है कि यह एक पुराना जवाब है, लेकिन मुझे अभी यह मिला है और यह बहुत अच्छा काम करता है, इसलिए धन्यवाद! मुझे अभी एक सवाल है। स्ट्रिंग को लंबवत रूप से खींचने के लिए इस कोड को संशोधित करने का कोई तरीका है? (पाठ 90 डिग्री प्रतिद्वंद्वी घुमाए गए हैं) – Ryan

+0

@Ryan - पहले छवि को घुमाएं, फिर टेक्स्ट में जलाएं, फिर इसे घुमाएं। रोटेशन करने के लिए कुछ आसान UIImage एक्सटेंशन के लिए http://www.catamount.com/forums/viewtopic.php?f=21&t=967 यहां देखें। – Rayfleck

5

धन्यवाद Rayfleck! इसने काम कर दिया।

रेटिना डिस्प्ले के साथ वैकल्पिक अनुकूलता को जोड़ने के लिए (छवि के '@ 2x' संस्करण के दौरान सुधारों अस्थिर पत्र पैमाने):

बदल देते हैं:

UIGraphicsBeginImageContext(img.size); 
सशर्त साथ

:

if (UIGraphicsBeginImageContextWithOptions != NULL) 
    UIGraphicsBeginImageContextWithOptions(img.size,NO,0.0); 
else 
    UIGraphicsBeginImageContext(img.size); 
+0

धन्यवाद रॉब, यह अच्छी तरह से काम करता है। यह वास्तव में क्या कर रहा है? – Ryan

+0

मदद करने में खुशी हुई! आईएफ कथन यह देखने के लिए एक त्वरित जांच है कि क्या UIGraphicsBeginImageContextWithOptions उपलब्ध है (ios4 या बाद में)। यदि नहीं, तो आप मान सकते हैं कि यह रेटिना नहीं है। यदि यह है, तो आप विकल्पों को पारित कर रहे हैं: 1 - छवि का आकार (पाठ क्षेत्र); 2 - पारदर्शी पृष्ठभूमि (अपारदर्शी = नहीं); और 3 - '0.0' जो डिवाइस को अपने पैमाने का उपयोग करने के लिए कहता है (रेटिना डिस्प्ले 2.0 (?) के लिए डिफ़ॉल्ट होगा) – Rob

0

Ios7 के लिए अद्यतन ...

/* Creates an image with a home-grown graphics context, burns the supplied string into it. */ 
    - (UIImage *)burnTextIntoImage:(NSString *)text :(UIImage *)img { 

     UIGraphicsBeginImageContext(img.size); 

     CGRect aRectangle = CGRectMake(0,0, img.size.width, img.size.height); 
     [img drawInRect:aRectangle]; 

     [[UIColor redColor] set];   // set text color 
     NSInteger fontSize = 14; 
     if ([text length] > 200) { 
      fontSize = 10; 
     } 

     UIFont *font = [UIFont fontWithName:@"Courier" size:fontSize]; 
     NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 
     paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail; 


     paragraphStyle.alignment = NSTextAlignmentRight; 
     NSDictionary *attributes = @{ NSFontAttributeName: font, 
             NSParagraphStyleAttributeName: paragraphStyle, 
             NSForegroundColorAttributeName: [UIColor whiteColor]}; 
     [text drawInRect:aRectangle withAttributes:attributes]; 

     UIImage *theImage=UIGraphicsGetImageFromCurrentImageContext(); // extract the image 
     UIGraphicsEndImageContext();  // clean up the context. 
     return theImage; 
    } 
0

यह दृष्टिकोण खाते में स्क्रीन के पैमाने लेता है और यह सुपर सहज ज्ञान युक्त

UIImage * img = ... 
    UIImageView * iV = [[UIImageView alloc] initWithImage:img]; 
    UILabel * l = [[UILabel alloc] initWithFrame:iV.bounds]; 
    l.textAlignment = ...; 
    l.adjustsFontSizeToFitWidth = YES; 
    l.textColor = ...; 
    l.font = ...; 
    l.text = ...; 

    [iV addSubview:l]; 

    UIGraphicsBeginImageContextWithOptions(iV.bounds.size, NO, 0); 
    [iV.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage * finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return finalImage