una transcribir texto programa pasarlo para imagen gratis fairy escanear convertir app ios uiimage

ios - transcribir - ¿Cómo convertir texto a imagen?



programa para convertir imagen a texto word (6)

Estoy intentando escribir una función para convertir el texto del campo de texto en una imagen ( example ). He intentado buscar un ejemplo, la mayoría de la muestra también es sobreescribir texto en la imagen. ¿Es posible darme algunos ejemplos o sugerencias sobre cómo hacer eso?


Respuesta rapida

Si solo necesita obtener una imagen del contenido visible de UIFieldView , UITextView o UILabel , puede utilizar el siguiente método.

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 }

Caso especial

Cuando el contenido del texto se desplaza fuera del marco, como en un UITextView , la solución anterior solo capturará el área visible. Para obtener todo, una solución es cambiar el tamaño de una copia de la vista de texto al tamaño de su vista de contenido antes de crear una imagen de la misma.

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 }

Notas

  • También se puede cambiar el tamaño de la vista de texto original y luego volver a cambiar su tamaño. Sin embargo, parecía más simple hacer una copia temporal.
  • Otra forma de obtener una copia de una vista es archivarla y desarchivarla .
  • O simplemente puedes escribir directamente a un UIImage .

Es sencillo. Desea convertir texto a UIImage. Simplemente draw text view''s layer into Image context y conviértalo en UIImage. El código está abajo.

+ (UIImage *) imageWithView:(UITextView *)view { UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0); [view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage * img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return img; }


Puede intentar crear su propia subclase UIView personalizada, dibujar una NSString en ella (su texto) y luego convertirla en un UIImage . Puede dibujar texto en una UIView solo en el método -drawRect: . Aquí hay una idea para tu subclase.

@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*/]; }

Más información sobre el dibujo de NSString s se puede encontrar aquí . Una vez que tenga esta vista con su texto, UIImage un UIImage con esta técnica .


Varios enfoques son posibles.

  1. Si tiene un UITextField , UITextView o UILabel que solo desea representar como imagen, puede emplear los enfoques tradicionales de instantáneas, como:

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

  2. Si quisieras una rutina genérica de "crear imagen a partir de texto", en iOS 7, se vería así:

    - (UIImage *)imageFromString:(NSString *)string attributes:(NSDictionary *)attributes size:(CGSize)size { UIGraphicsBeginImageContextWithOptions(size, NO, 0); [string drawInRect:CGRectMake(0, 0, size.width, size.height) withAttributes:attributes]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }

    Lo anterior creará una imagen cuyo tamaño variará según el texto. Claramente, si solo quieres una imagen de tamaño fijo, entonces usa el frame constantes, en lugar de construirlo dinámicamente.

    De todos modos, podrías usar lo anterior así:

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

  3. Si necesita admitir versiones anteriores de iOS, puede usar esta técnica:

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

Hay muchas, muchas permutaciones de cada uno de estos. Solo depende de lo que estas tratando de lograr.

Otro enfoque es simplemente tener los UIImageView y UILabel / UITextView en la vista, y si tiene una imagen del servidor, configure la imagen de UIImageView y el texto, configure el text de UILabel / UITextView .


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;

Quiero presentarlo en la vista de tabla, así que estoy escribiendo este código en celda por fila en la ruta del índice.

(dataDict es mi diccionario donde obtuve todos mis datos).


NSString *string = @"Some text"; UIGraphicsBeginImageContext(CGSizeMake(80, 50)); [string drawAtPoint:CGPointMake(10, 20) withFont:[UIFont systemFontOfSize:12]]; UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();

Puedes empezar con esto