如何在有/没有转换的情况下以编程方式在绘图中使用 .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.ico
到 foo-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?
如何在没有任何按钮的情况下以编程方式关闭 UIAlertController?
如何在没有故事板的情况下以编程方式将单元格添加到 CollectionView
在没有 BHO 的情况下以编程方式确定 IE 窗口当前 URL
如何在不使用 UINavigationController 的情况下以编程方式进入 rootViewController