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

Posted

技术标签:

【中文标题】如何在有/没有转换的情况下以编程方式在绘图中使用 .ico 图像【英文标题】:How to use .ico images in plots programmatically with/without conversion 【发布时间】:2016-09-03 18:30:38 【问题描述】:

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

我的问题是How to convert .ICO to .PNG?的后续,针对R,并附有以下具体细节:

我不是在询问涉及在 html 中嵌入图标的方法,例如在shiny 应用程序中(作者:RStudio)。这当然是可能的。

图标.ICO 文件能否直接用于base-R 绘图、ggplot 对象(作者:Hadley Wickham)、格状绘图(作者:Deepayan Sarkar)?这种方法对于将输出打印到PDF 是否有效?

如何将 ICO 图标转换为 PNG 有或没有专用的 R 库。此方法会小心处理图标的图像大小、深度、透明度和其他潜在的重要属性。

这样做的动机很简单,因为有许多可以在绘图对象中使用的开源图标库,例如Inserting an image to ggplot2, Display custom image as geom_point, Inserting an image to ggplot outside the chart area.

在我在顶部引用的问题How to convert .ICO to .PNG? 中,C#Python 中有代码示例,但R 中没有。

【问题讨论】:

【参考方案1】:

现在有一个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:

【讨论】:

在我看的时候,这个小插图和大多数包的文档一样好!【参考方案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 文件(规范在 Wikipedia 上)但是当 ImageMagick 存在并且做得如此出色时,它似乎有点毫无意义。使用它。

【讨论】:

不确定我是否理解。转换由 ImageMagick 的“convert”命令完成。应该从 R 控制台或 R Studio if ImageMagick 正确安装。你试过了吗??? 不,我没有尝试过,因为我目前只能访问浏览器(!)我想我明白了:system() 函数就像一个命令行调用,对吧?我可以做这样的事情system("ls -la"),可以吗?编辑:是的,刚刚在rollapp.com 上测试过。 我会稍等片刻,看看是否有人提出其他想法,如果没有人提出,我将接受您的回答。再次感谢! 仅供参考,CRAN 上现在有一个 magick 包,请参阅下面的答案

以上是关于如何在有/没有转换的情况下以编程方式在绘图中使用 .ico 图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 XIB 文件的情况下以编程方式更新 Xcode 中的 UILabel?

如何在没有 XML 的情况下以编程方式将片段添加到活动

如何在没有任何按钮的情况下以编程方式关闭 UIAlertController?

如何在没有故事板的情况下以编程方式将单元格添加到 CollectionView

在没有 BHO 的情况下以编程方式确定 IE 窗口当前 URL

如何在不使用 UINavigationController 的情况下以编程方式进入 rootViewController