我需要所有的苹果表情符号。
我可以得到所有的表情符号,并把它们放在一个字符串中,从网站的getemoji复制它们,但在我的应用程序中,我需要正确的顺序的表情符号作为图像。
有没有一种很好的方法可以把我复制的表情符号转换成字符串或者UIImage
或者一个更好的解决方案,让所有的苹果表情符号按正确的顺序排列?
发布于 2016-08-07 07:14:38
针对Swift 4.1更新
将此扩展添加到您的项目中
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
}
}
上面的代码将当前的String
绘制到一个带有白色背景色的图像上下文中,并最终将其转换为UIImage
。
现在你可以写
示例
给定指示表情符号的Unicode值的范围列表
let ranges = [0x1F601...0x1F64F, 0x2702...0x27B0]
您可以将其转换为图像列表
let images = ranges
.flatMap { $0 }
.compactMap { Unicode.Scalar($0) }
.map(Character.init)
.compactMap { String($0).image() }
结果:
我不能保证范围列表是完整的,您需要自己搜索它
发布于 2019-03-25 21:51:17
以下是更新后的答案,并做了以下更改:
draw(at:withAttributes:)
而不是draw(in:withAttributes:)
:为了获得与understanding的实际大小相关的结果UIImage,使用了添加了更好的注释
Swift 5
import UIKit
extension String {
func textToImage() -> UIImage? {
let nsString = (self as NSString)
let font = UIFont.systemFont(ofSize: 1024) // you can change your font size here
let stringAttributes = [NSAttributedString.Key.font: font]
let imageSize = nsString.size(withAttributes: stringAttributes)
UIGraphicsBeginImageContextWithOptions(imageSize, false, 0) // begin image context
UIColor.clear.set() // clear background
UIRectFill(CGRect(origin: CGPoint(), size: imageSize)) // set rect size
nsString.draw(at: CGPoint.zero, withAttributes: stringAttributes) // draw text within rect
let image = UIGraphicsGetImageFromCurrentImageContext() // create image from context
UIGraphicsEndImageContext() // end image context
return image ?? UIImage()
}
}
Swift 3.2
import UIKit
extension String {
func textToImage() -> UIImage? {
let nsString = (self as NSString)
let font = UIFont.systemFont(ofSize: 1024) // you can change your font size here
let stringAttributes = [NSFontAttributeName: font]
let imageSize = nsString.size(attributes: stringAttributes)
UIGraphicsBeginImageContextWithOptions(imageSize, false, 0) // begin image context
UIColor.clear.set() // clear background
UIRectFill(CGRect(origin: CGPoint(), size: imageSize)) // set rect size
nsString.draw(at: CGPoint.zero, withAttributes: stringAttributes) // draw text within rect
let image = UIGraphicsGetImageFromCurrentImageContext() // create image from context
UIGraphicsEndImageContext() // end image context
return image ?? UIImage()
}
}
发布于 2017-11-08 01:58:56
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
}
}
https://stackoverflow.com/questions/38809425
复制相似问题