【问题标题】:How do I convert an UTF8 encoded emoji character to an image?如何将 UTF8 编码的表情符号字符转换为图像?
【发布时间】:2020-04-23 15:55:18
【问题描述】:

我有一个包含表情符号的长向量,如下所示:

emojis <- c("????","????","????","????","????")

然后我得到了他们的 utf-8 编码,我在 devtools::install_github( "ThinkRstat/utf8splain") 的帮助下提取了它们,然后是 library(utf8splain),例如:(未准确表示)

emojis_enc <- c()
for(i in 1:length(emojis)){
  emojis_enc <- c(emojis_enc, utf8splain::runes(emojis[i])$rune)
}
#emojis_enc <- c("U+12345","U+67891","U+91234","U+56789","U+123A6")

然后我做了一个函数:

emojiPlot <- function(photo_enc, emo_char){
  png(paste0(photo_enc, ".png"))
  plot(emo_char, rescale = T, ylim = c(-1,1), xlim = c(-1,1))
  dev.off()
}

当我这样做emojiPlot("emojis_enc[1]", emojis[1]) 时,我只会得到一个带有 x 和 y 轴的空图。我对 UTF 和 R 很陌生。

我之所以这样做是因为我在gephi软件中使用了一个名为“imagepreview”的插件。该插件需要节点作为照片。因此,我的目标是在 .png 中添加单独的表情符号,并将它们的 utf 编码作为名称。所以当我导入我的数据时,我可以将包含 utfs 的 CSV 指向照片的名称并拉出正确的表情符号。然后就画图吧。

我这样做是为了一个研究项目。我愿意接受更好的方法。

我在 Ubuntu 操作系统中。如果您使用 Windows,则表情符号将显示为正确的 utf 格式,并且不会被渲染。

【问题讨论】:

    标签: r regex utf-8 emoji


    【解决方案1】:

    获取表情符号的 png 文件的另一种解决方案是从 Twitter 下载它们,它接受链接到 png 文件的 URL 中的符文:

    library(tidyverse)
    data <- tibble(emojis = c("?","?","?","?","?")) %>% 
      mutate(rune = map_chr(emojis, ~ utf8splain::runes(.)$rune)) %>%    # convert to runes
      mutate(rune = str_remove(rune, fixed("U+"))) %>%                   # remove leading U+
      mutate(emoji_url = paste0("https://abs.twimg.com/emoji/v2/72x72/", # make url
                                tolower(rune), ".png"))
    
    # download the files
    map2(data$emoji_url, paste0(data$rune, ".png"), function(x, y) download.file(x, y, method = "curl"))
    

    这将下载 png 文件并将它们放在您的工作目录中。

    在基地

    tidyverse 代码是可选的,在 base 中也可以这样做:

    emojis <- c("?","?","?","?","?")
    rune <- sapply(emojis, function(x) utf8splain::runes(x)$rune)
    emojiurl <- paste0("https://abs.twimg.com/emoji/v2/72x72/", tolower(rune), ".png")
    
    for (i in seq_along(emojiurl)) {
      download.file(emojiurl[i], paste0(rune[i], ".png"), method = "curl")
    }
    

    【讨论】:

    • 感谢 JB,tidyverse 和我在一起不太好。我过去在导师面前用变异功能犯了错误嘿嘿嘿。但尽管如此,这是非常值得赞赏的。它实际上比我目前的方法快得多。
    • 啊,我明白了。我在基础中添加了一个替代方案。我已经有了 tidyverse 代码,但没有必要。
    • 哇,我应该养成使用 apply() 函数的习惯。谢谢JB,你是最棒的!
    【解决方案2】:

    当您应该使用 text 时,您正在使用 plot 绘制字符。
    在下面的代码中,使用plot 创建了一个绘图,参数type = "n",意思是不要绘图。然后添加文本(表情符号)。

    emojiPlot <- function(photo_enc, emo_char){
      png(paste0(photo_enc, ".png"), units = "cm",
          width = 10, height = 10, res = 600)
      plot(0, 0, xlim = c(-1, 1), ylim = c(-1, 1), type = "n")
      text(0, 0, emo_char)
      dev.off()
    }
    
    emojiPlot("emojis_enc[1]", emojis[1])
    

    文件"emojis_enc[1].png"张贴在这里:

    【讨论】:

    • 从来没有感谢过你。我真的很感谢你的帮助。祝你有个美好的一天!
    • @ToadPitt 很高兴它有帮助。
    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2017-12-19
    • 2019-01-10
    • 2021-10-04
    相关资源
    最近更新 更多