首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将Apple Emoji (字符串)转换为UIImage

将Apple Emoji (字符串)转换为UIImage
EN

Stack Overflow用户
提问于 2016-08-07 06:51:18
回答 8查看 15.2K关注 0票数 57

我需要所有的苹果表情符号。

我可以得到所有的表情符号,并把它们放在一个字符串中,从网站的getemoji复制它们,但在我的应用程序中,我需要正确的顺序的表情符号作为图像

有没有一种很好的方法可以把我复制的表情符号转换成字符串或者UIImage

或者一个更好的解决方案,让所有的苹果表情符号按正确的顺序排列?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2016-08-07 07:14:38

针对Swift 4.1更新

将此扩展添加到您的项目中

代码语言:javascript
复制
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值的范围列表

代码语言:javascript
复制
let ranges = [0x1F601...0x1F64F, 0x2702...0x27B0]

您可以将其转换为图像列表

代码语言:javascript
复制
let images = ranges
    .flatMap { $0 }
    .compactMap { Unicode.Scalar($0) }
    .map(Character.init)
    .compactMap { String($0).image() }

结果:

我不能保证范围列表是完整的,您需要自己搜索它

票数 96
EN

Stack Overflow用户

发布于 2019-03-25 21:51:17

以下是更新后的答案,并做了以下更改:

的实际大小相关的结果UIImage,使用了添加了更好的注释

Swift 5

代码语言:javascript
复制
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

代码语言:javascript
复制
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()
    }
}
票数 15
EN

Stack Overflow用户

发布于 2017-11-08 01:58:56

Swift 4也是这样:

代码语言:javascript
复制
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
    }
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38809425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档