如何将UTF8编码的表情符号转换为图像?

3

我有一个包含表情符号的长向量,类似于这样:

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格式,并且不会被渲染。
2个回答

2

获取表情符号的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代码,但同样可以使用基础语言完成:

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不太搭。曾经在我的导师面前用mutate函数犯了一个错误,呵呵呵。但尽管如此,这确实非常受欢迎。它实际上比我目前的方法快得多。 - CaseebRamos
1
啊,我明白了。我在基础部分添加了一个备选方案。我已经有了tidyverse的代码,但这并不是必须的。 - JBGruber
哇,我应该养成使用apply()函数的习惯。谢谢JB,你是最棒的! - CaseebRamos

1
当你需要绘制字符时,应该使用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"已经发布在这里:

enter image description here


1
从来没有感谢过你。我非常感激你的帮助。祝你有美好的一天,伙计! - CaseebRamos
1
@ToadPitt 很高兴能帮到你。 - Rui Barradas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接