Ich versuche, eine Funktion zu schreiben, das Textfeld ein Text zu einem Bild (example) zu konvertieren. Ich habe versucht, nach einem Beispiel zu suchen, das meiste des Beispiels ist auch Text auf Bild überschreiben. Ist es möglich, mir ein Beispiel oder Hinweise zu geben, wie das geht?Wie konvertiert man Text in Bild?
Antwort
Mehrere Ansätze sind möglich.
Wenn Sie eine vorhandene
UITextField
,UITextView
oderUILabel
, die Sie gerade als ein Bild machen möchten, können Sie die traditionellen Schnappschuss Ansätze beschäftigen wie:- (UIImage *)imageForView:(UIView *)view { UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0); if ([view respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; // if we have efficient iOS 7 method, use it ... else [view.layer renderInContext:UIGraphicsGetCurrentContext()]; // ... otherwise, fall back to tried and true methods UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }
Wenn Sie ein gesuchter generische "Bild aus Text erstellen" -Routine, in iOS 7 würde es aussehen wie:
Das obige wird ein Bild erstellen deren Größe hängt vom Text ab. Wenn Sie nur ein Bild fester Größe wünschen, verwenden Sie die Konstanten
frame
, anstatt es dynamisch zu erstellen.Wie dem auch sei, könnten Sie dann die oben verwenden wie so:
NSString *string = @"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; NSDictionary *attributes = @{NSFontAttributeName : [UIFont systemFontOfSize:20], NSForegroundColorAttributeName : [UIColor blueColor], NSBackgroundColorAttributeName : [UIColor clearColor]}; UIImage *image = [self imageFromString:string attributes:attributes size:self.imageView.bounds.size];
Wenn Sie früher iOS-Versionen unterstützen müssen, können Sie diese Technik verwenden könnte:
- (UIImage *)imageFromString:(NSString *)string font:(UIFont *)font size:(CGSize)size { UIGraphicsBeginImageContextWithOptions(size, NO, 0); [string drawInRect:CGRectMake(0, 0, size.width, size.height) withFont:font lineBreakMode: NSLineBreakByWordWrapping]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }
Es gibt viele, viele Permutationen von jedem von diesen. Es hängt nur davon ab, was Sie erreichen wollen.
Ein weiterer Ansatz ist einfach beide UIImageView
haben und UILabel
/UITextView
Objekte in der Ansicht, und wenn Sie ein Bild von dem Server haben, setzen Sie das Bild des UIImageView
und Text, stellen Sie die text
der UILabel
/UITextView
.
Schöne Antwort! Wenn Sie farbigen Text in ein Bild für etwas, das tönbar ist, z. Ein UIBarButtonItem, Sie haben zwei Optionen: 1) Legen Sie die Farbe für das Element, z. B .: [buttonItem setTintColor: color]; 2) Spezifizieren Sie den Rendering-Modus vor dem Zurückgeben des uiimage, wie: return [image imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]; –
@Rob obwohl dies eine sehr alte Antwort ist ... ich möchte die Option (3) aus Ihrer Antwort implementieren. Aber sein Text wird linksbündig platziert. Wie kann ich es zentrieren ausrichten? Ich möchte nur zwei Buchstaben im Bild haben. –
Warum nicht Option 2? In diesem Fall haben Sie http://StackOverflow.com/a/477658/1271826. Wenn Sie dies nicht tun, müssen Sie das Begrenzungsrechteck, das eine Textzeile benötigt, manuell berechnen und dann den "Ursprung" der Stelle, an der Sie es zeichnen, um den richtigen Betrag versetzen. Option 2 ist viel einfacher. – Rob
Sie könnten versuchen, Ihre eigene UIView
Unterklasse zu schaffen, ein NSString
darauf (Ihr Text) zeichnen, dann, dass zu einem UIImage
konvertieren. Sie können Text auf einer UIView
nur in der -drawRect:
Methode zeichnen. Hier ist eine Idee für Ihre Unterklasse.
@interface TextView : UIView {
NSString *_text;
}
- (id)initWithFrame:(CGRect)frame andText:(NSString *)text;
@end
@implementation TextView
- (id)initWithFrame:(CGRect)frame andText:(NSString *)text
{
if (self = [super initWithFrame:frame]) {
_text = text;
}
[self setNeedsDisplay]; // calls the -drawRect method
return self;
}
- (void)drawRect:(CGRect)rect
{
[_text drawAtPoint:/* location of text*/
withAttributes:/* style of text*/];
}
Mehr Informationen über NSString
s can be found here Zeichnung. Sobald Sie diese Ansicht mit Ihrem Text darauf haben, konvertieren Sie sie in eine UIImage
with this technique.
ok, danke. Lass es mich versuchen. – Lazarus
Es ist ganz einfach. Sie möchten Text in UIImage konvertieren. Nur draw text view's layer into Image context
und in UIImage konvertieren. Code ist unten.
+ (UIImage *) imageWithView:(UITextView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
NSString *string = @"Some text";
UIGraphicsBeginImageContext(CGSizeMake(80, 50));
[string drawAtPoint:CGPointMake(10, 20)
withFont:[UIFont systemFontOfSize:12]];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Sie können mit diesem
Swift Antwort starten
Wenn Sie nur ein, ein Bild des sichtbaren Inhalt eines UIFieldView
, UITextView
oder UILabel
bekommen müssen, dann können Sie die folgende Methode verwenden .
func imageFromView(myView: UIView) -> UIImage {
UIGraphicsBeginImageContextWithOptions(myView.bounds.size, false, UIScreen.mainScreen().scale)
myView.drawViewHierarchyInRect(myView.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
Sonderfall
Wenn der Textinhalt scrollt aus dem Rahmen, wie in einem UITextView
, die Lösung oben nur den sichtbaren Bereich erfassen. Um alles zu bekommen, besteht eine Lösung darin, eine Kopie der Textansicht auf die Größe ihrer Inhaltsansicht zu skalieren, bevor ein Bild davon erstellt wird.
func imageFromTextView(textView: UITextView) -> UIImage {
// Make a copy of the textView first so that it can be resized
// without affecting the original.
let textViewCopy = UITextView(frame: textView.frame)
textViewCopy.attributedText = textView.attributedText
// resize if the contentView is larger than the frame
if textViewCopy.contentSize.height > textViewCopy.frame.height {
textViewCopy.frame = CGRect(origin: CGPointZero, size: textViewCopy.contentSize)
}
// draw the text view to an image
UIGraphicsBeginImageContextWithOptions(textViewCopy.bounds.size, false, UIScreen.mainScreen().scale)
textViewCopy.drawViewHierarchyInRect(textViewCopy.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
Hinweise
- Man könnte auch die Größe nur die ursprüngliche Text-Ansicht und es dann wieder die Größe zurück. Es schien jedoch einfacher, nur eine temporäre Kopie zu erstellen.
- Eine andere Möglichkeit, eine Kopie einer Ansicht zu erhalten, ist archive and unarchive it.
- Oder Sie könnten einfach direkt an eine
UIImage
schreiben.
NSString * ImgString = [[[self.dataDict valueForKey:@"newsItems"]objectAtIndex:indexPath.row]valueForKey:@"image"];
NSURL *imageURL = [NSURL URLWithString:ImgString];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *image = [UIImage imageWithData:imageData];
cell.imageLabel.image = image;
Ich möchte Tabellenansicht präsentieren in so dass ich diesen Code in der Zelle für Zeile an der Indexpfad schreibe.
(dataDict ist mein Wörterbuch, wo ich alle meine Daten erhalten habe).
- 1. Wie konvertiert man Text mit jquery in ein Bild?
- 2. Wie konvertiert man Textdaten in ein Bild?
- 3. Wie konvertiert man ein Bild in Zeichensegmente?
- 4. Wie konvertiert man Text-Label in Integer?
- 5. Wie man reStructuredText in reinen Text konvertiert
- 6. Wie konvertiert man Text in Pfade?
- 7. Wie konvertiert man ein Pyglet-Bild in ein PIL-Bild?
- 8. Wie konvertiert man Unicode-Text in normalen Text
- 9. Wie konvertiert man vietnamesischen Text in normalen Text?
- 10. Wie konvertiert man ein Bild in eine Zeichenfolge
- 11. Wie man kleines Bild in Text einbaut
- 12. Wie konvertiert man Bytearray zu Bild oder Bild zu Bytearray?
- 13. Wie konvertiert man HTML einer Website in ein Bild?
- 14. Wie konvertiert man ein Bild in eine Matrix in opencv
- 15. Wie konvertiert man Bild in Byte-Array in Java?
- 16. Wie konvertiert man ein Bitmap-Bild in IntPtr in C#?
- 17. Wie konvertiert man ein Bild in Graustufen in nativen reagieren?
- 18. Wie konvertiert man Bitmap in Bild <Bgr, Byte>
- 19. Wie konvertiert man ein Bild in die base64-Codierung?
- 20. Silverlight 4.0: Wie konvertiert man Byte [] in Bild?
- 21. Wie konvertiert man ein Bild in WORD (uint16) Array?
- 22. Wie konvertiert man eine PDF in ein Bild?
- 23. Wie konvertiert man eine HTML-Webseite in ein Bild
- 24. Wie konvertiert man ein Bild zu Base64 String in Java?
- 25. Wie konvertiert man ein Bild von np.uint16 in np.uint8?
- 26. Wie konvertiert man Knoten zu Bild in javafx 2.1?
- 27. Wie konvertiert man ein Bild in Base64 String
- 28. Wie konvertiert man ein nicht-transparentes Bild in ein Palettenbild?
- 29. Wie konvertiert man ein Bild in ein Retina Display?
- 30. Wie konvertiert man den Text einer Textbox in einen Wert?
Ich brauche diese Funktion ist, weil ich Daten vom Server bekomme. Wenn die Daten ein Bild haben, zeigt die UIIMAGEView das Bild an, aber wenn kein Bild vorhanden ist, muss ich den Teil des Inhalts in Bild umwandeln und auf der UIIMAGEVIEW anzeigen. – Lazarus
Schauen Sie sich hier meine Lösung an. Swift 3: [Umwandlung von Text in UIImage iOS] (http://stackoverflow.com/a/43109230/6665075) –
Siehe [meine Swift 4/iOS 11 Antwort für eine ähnliche Frage] (https://stackoverflow.com/a/45821857/1966109), die bis zu 6 verschiedene Möglichkeiten zeigt, Text in ein Bild (oder eine Ansicht) zu konvertieren, um es anzuzeigen. –