ios swift emoji

ios - Convertir Apple Emoji(String) a UIImage



swift (4)

Swift 4.2

Realmente me gustó la solución de @Luca Angeletti. Hice la misma pregunta que @jonauz sobre el fondo transparente. Así que con esta pequeña modificación obtienes lo mismo pero con un color de fondo claro.

No tuve el representante para responder en un comentario.

import UIKit extension String { func emojiToImage() -> UIImage? { let size = CGSize(width: 30, height: 35) UIGraphicsBeginImageContextWithOptions(size, false, 0) UIColor.clear.set() let rect = CGRect(origin: CGPoint(), size: size) UIRectFill(CGRect(origin: CGPoint(), size: size)) (self as NSString).draw(in: rect, withAttributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 30)]) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } }

Necesito todos los emojis de manzana.
Puedo obtener todos los emojis y colocarlos en una Cadena copiándolos del sitio getemoji, pero en mi aplicación necesito los emojis en el orden correcto como imágenes .

¿Hay una buena manera de convertir los emojis que copio en un String a un UIImage ?
¿O una mejor solución para obtener todos los emojis de Apple en el orden correcto?


Actualizado para Swift 4.1

Añade esta extensión a tu proyecto

import UIKit extension String { func image() -> UIImage? { let size = CGSize(width: 40, height: 40) UIGraphicsBeginImageContextWithOptions(size, false, 0) UIColor.white.set() let rect = CGRect(origin: .zero, size: size) UIRectFill(CGRect(origin: .zero, size: size)) (self as AnyObject).draw(in: rect, withAttributes: [.font: UIFont.systemFont(ofSize: 40)]) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } }

El código anterior dibuja la String actual en un contexto de imagen con un color de fondo blanco y finalmente la transforma en un UIImage .

Ahora puedes escribir

Ejemplo

Dada una lista de rangos que indican los valores Unicode de los símbolos emoji

let ranges = [0x1F601...0x1F64F, 0x2702...0x27B0]

Puedes transformarlo en una lista de imágenes.

let images = ranges .flatMap { $0 } .compactMap { Unicode.Scalar($0) } .map(Character.init) .compactMap { String($0).image() }

Resultado:

No puedo garantizar que la lista de rangos esté completa, tendrá que buscarla usted mismo


Lo mismo para Swift 4:

extension String { func emojiToImage() -> UIImage? { let size = CGSize(width: 30, height: 35) UIGraphicsBeginImageContextWithOptions(size, false, 0) UIColor.white.set() let rect = CGRect(origin: CGPoint(), size: size) UIRectFill(rect) (self as NSString).draw(in: rect, withAttributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 30)]) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } }


Respuesta actualizada de @Luca Angeletti para Swift 3.0.1

extension String { func image() -> UIImage? { let size = CGSize(width: 30, height: 35) UIGraphicsBeginImageContextWithOptions(size, false, 0); UIColor.white.set() let rect = CGRect(origin: CGPoint(), size: size) UIRectFill(CGRect(origin: CGPoint(), size: size)) (self as NSString).draw(in: rect, withAttributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 30)]) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } }