小编Har*_*son的帖子

使用扩展/ UIgraphicscontext在iOS中将表情符号(字符串)渲染到最高分辨率图像

因此众所周知,苹果在unicode中支持表情符号的图像可以以高达160x160像素的分辨率提取.有一个工具可以在OS X上通过从"apple color emoji"字体中提取数据来执行此操作:https://github.com/tmm1/emoji-extractor

我有兴趣在iOS上以类似的方式提取/利用苹果的Emoji图像,我找到了以下解决方案,并且非常喜欢这里的实现:https://stackoverflow.com/a/38809531/4556704

extension String {
func image() -> UIImage {
    let size = CGSize(width: 30, height: 35)
    UIGraphicsBeginImageContextWithOptions(size, false, 0);
    UIColor.whiteColor().set()
    let rect = CGRect(origin: CGPointZero, size: size)
    UIRectFill(CGRect(origin: CGPointZero, size: size))
    (self as NSString).drawInRect(rect, withAttributes: [NSFontAttributeName: UIFont.systemFontOfSize(30)])
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
}

}
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了一个问题,即我遇到了这个实现.如果我使用上面的字符串扩展名,我很明显结果图像的分辨率不是160x160像素.我的意思是,如果我要在项目的资产中包含一个160x160的图像,我无法生成质量相当的图像.

这是什么原因,如果不向我的项目导入超过1700个表情符号图像,我可以解决这个问题吗?我认为iOS上的字体仍然必须包含生成160x160图像样本所需的数据.String扩展是理想的,因为它允许我比我简单地导入所有这些图像更自由地引用表情符号字符.

我认为这可能需要一些低级代码,这可能比它的价值更麻烦,但我真的很想知道更多关于这个问题的根源和可能的修复.我确信这归因于苹果没有将表情符号渲染到高于必要水平的水平,但肯定有一些方法可以覆盖它.另外我知道还有其他高分辨率的表情符号图像集,这个问题与此无关.

编辑: 不匹配的决议

编辑10/18/16:我得出结论,问题可归因于被采样的源图像不具有可能的最高分辨率.似乎表情符号没有以高于48x48像素的分辨率进行渲染,因为已经证明表情符号图像可以在OS X上渲染到160x160像素,并且可以从"Apple Color Emoji.ttf/.ttc"中删除"在160x160像素.我不确定是否有可能解决这个问题,因为它似乎是iOS使用unicode字符代码映射到png图像数据的强硬限制.

ios emoji uigraphicscontext swift

7
推荐指数
1
解决办法
1342
查看次数

标签 统计

emoji ×1

ios ×1

swift ×1

uigraphicscontext ×1