如何在有/无转换的情况下以编程方式使用.ico图像

时间:2016-05-09 07:55:05

标签: r ggplot2 png lattice ico

如何使用/不使用转换以编程方式在图中使用.ICO图像文件?

我的问题是针对R的{​​{3}}的跟进,并提供了以下具体细节:

  • 我不是在询问涉及在HTML内转换图标的方法,例如在shiny应用程序内部(作者:RStudio)。这当然是可能的。

  • 图标.ICO文件可以直接用在base-R图中,ggplot对象(作者:Hadley Wickham),格子图(作者:Deepayan Sarkar)?这种方法是否可以将输出打印到PDF

  • 如果使用或不使用专用的ICO库,将PNG图标转换为R。此方法将小心处理图标的图像大小,深度,透明度和其他可能重要的属性。

这样做的动机很简单,就是可以在绘图对象中使用许多图标的开源库,例如: How to convert .ICO to .PNG?Inserting an image to ggplot2Display custom image as geom_point

在我引用顶部的问题Inserting an image to ggplot outside the chart area中,C#Python中有代码示例,但R中没有代码。

2 个答案:

答案 0 :(得分:2)

在您的系统上安装ImageMagick您的系统 - 它不是R包)。它是一套开源图像处理和转换工具。

然后,您可以从命令行使用convert foo.ico foo.png转换图标。如果ICO文件包含多个图标,则会foo-1.icofoo-N.ico。如果convert无法正常工作,那么您还没有正确安装ImageMagick。

如果您想从R执行此操作,请使用system功能:

 name = "foo"
 system(paste0("convert ",name,".ico ",name,".png"))

然后使用生成的PNG文件。它们将保留所有属性(透明度等),并且可以在这些包中使用任何其他PNG文件,这超出了本问题的范围。您现在有了PNG文件。

一个可以写一个R包来本地读取ICO文件(规范在维基百科上)但是当ImageMagick存在并且做得如此出色时,它似乎有点无意义。使用它。

答案 1 :(得分:2)

现在有magick个套餐,您不再需要使用system

library(magick)
path  <- "magic.png" # wherever you want to save
image <- image_read("https://rpubs.com/favicon.ico") # works with local path as well

在R studio中,这将在绘图窗口中打印我们的图像,对于ico文件,它会显示文件中可用的不同图标。

image 

然后您可以保存所需的格式:

image_write(image,path,"png")
file.exists(path)
# [1] TRUE

a really cool vignette