【问题标题】:Load image from website从网站加载图像
【发布时间】:2013-08-26 18:16:51
【问题描述】:

我正在尝试将一些化学结构图像添加到我创建的一些图中。我正在使用 ACToR 数据库来访问化学结构。例如:

(http://actor.epa.gov/actor/image?format=png%3Aw250%2Ch250&casrn=80-05-7)

这个网站的好处是您可以更改网址中的大小和化学成分,这样我就可以自动抓取图像。我希望存储一个包含 CAS 编号的对象,然后遍历 CAS 编号来制作绘图。

例如:

library(png)
casnums <- ("80-05-7","77-40-7","1478-61-1")
image.list <- list()
for(cas in casnums){
  image.list[[cas]] <- readPNG(paste0("http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&casrn=",cas))
}

我尝试使用 png 包中的 readPNG,并尝试使用 rgdal 包。不幸的是,据我所知,ACToR 只会生成 png 或 jpeg 格式的图像 - 所以我不能使用 grImport 包来读取矢量图像。

我真的希望找到一个解决方案,我不必手动下载每个图像 - 它们有很多。我愿意接受 R 去并将图像下载到文件夹的解决方案,然后我可以使用 png 包或 rgdal 包之类的东西来加载图像并绘制它们。

回复@ialm:这是我在您发表第一条评论后的尝试:

> download.file(url="http://actor.epa.gov/actor/image?format=png%3Aw250%2Ch250&casrn=80-05-7",destfile="test.png")
trying URL 'http://actor.epa.gov/actor/image?format=png%3Aw250%2Ch250&casrn=80-05-7'
Content type 'image/png' length 200 bytes
opened URL
downloaded 6691 bytes

Warning message:
In download.file(url = "http://actor.epa.gov/actor/image?format=png%3Aw250%2Ch250&casrn=80-05-7",  :
  downloaded length 6691 != reported length 200

当我打开图像时,它只有 7 KB,我在图像查看器中收到以下消息:“Windows 照片查看器无法打开此图片,因为文件似乎已损坏、损坏或太大。”

我应该注意我(违背我的意愿)使用 Windows 7。我还尝试同时使用 RStudio 和 R。RStudio 给了我警告消息,而 R 没有 - 但 R 创建了看似相同的文件(7KB) 仍然无法打开。

回应@Greg Snow:只是为了添加一些上下文,我从 RStudio 中的新 R 控制台运行以下内容。我使用了 64 位 Rv3.0.1 和 64 位 RStudio v0.97.551。

> library(png)
> search()
 [1] ".GlobalEnv"        "package:png"       "tools:rstudio"     "package:stats"     "package:graphics"  "package:grDevices"
 [7] "package:utils"     "package:datasets"  "package:methods"   "Autoloads"         "package:base"     
> con <- url("http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&casrn=1478-61-1",open='rb')
> rawpng <- readBin(con, what='raw', n=1e6)
> close(con)
> png1 <- readPNG(rawpng)
Error in readPNG(rawpng) : libpng error: bad adaptive filter value
> ls()
[1] "con"    "rawpng"

【问题讨论】:

  • 你看过?download.file吗?您可以自动将图像下载到您选择的文件夹中,然后使用一些包来读取 png 图像文件。
  • @ialm 我刚刚尝试使用download.file,但我收到一条警告消息并且图像无法读取。
  • 手动尝试第一个文件 download.file("http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&amp;casrn=80-05-7", destfile="tmp.png") 对我有用。您收到什么警告信息?
  • 嗯,这很奇怪。我在 Ubuntu 上运行 R 3.0.1,但我不知道这是否会有所作为。我会阅读?download.file 并尝试更改一些函数参数。如果失败了,也许比我更有知识的人可以提供帮助。
  • 好的,在阅读帮助文件并使用我的 Windows 机器后,设置 mode="wb" 可能会解决您的问题。试试download.file("http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&amp;casr‌​n=80-05-7", destfile="tmp.png", mode="wb")

标签: image r png download jpeg


【解决方案1】:

这是一种适用于单个图像的方法(它可以包装在要在循环中使用的函数中):

con <- url("http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&casrn=1478-61-1",
    open='rb')

rawpng <- readBin(con, what='raw', n=50000)

close(con)

png1 <- readPNG(rawpng)

我使用以下方法对其进行了测试:

plot(1:10, type='n')
rasterImage( as.raster(png1), 3,3,8,8 )

得到 50000 需要一些猜测,对于其他文件可能会有所不同(实际上我应该使用 48849,但它真的很可能会在文件之间发生变化)。

【讨论】:

  • 谢谢!这有效,但仅在 R 中,而不是在 RStudio 中。你知道它在 RStudio 中不起作用吗?当我尝试使用 RStudio 时,出现以下错误:“readPNG(rawpng) 中的错误:libpng 错误:自适应滤波器值错误”。
  • 我在 RStudio 支持页面上开始了讨论。 support.rstudio.org/help/discussions/problems/…
  • @dayne,我在试验时收到了类似的错误(纯 R,而不是 rstudio),但没有获得完整的 .png 文件。您是否收到相同文件的错误?如果不是,则可能是大小不同,您需要增加readBin 读取的字节数。
  • 我完全使用了你的代码。我还尝试将 n 增加到 100,000 和 150,000 - 两者都给出相同的错误。我也尝试将其设置为 48849。它们都不起作用,但它在 RGui 中起作用。
  • @dayne,这似乎很奇怪。由于我在没有下载整个文件时收到了类似的错误,我的猜测是 Rstudio 以某种方式干扰了下载。在每个中尝试str(rawpng),看看你的字节数是否相同。
【解决方案2】:

(只是发表我的评论作为答案)

您可以使用download.file 函数从网络下载文件。

此外,Windows 用户可能需要更改某些参数。看来mode="wb" 是正确下载和查看这些png 文件的必要参数。

所以,类似:

download.file("http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&casr‌​‌​n=80-05-7", 
              destfile="tmp.png", mode="wb")

为我工作。

【讨论】:

    【解决方案3】:

    请注意,Bioconductor R 包EBImage 能够直接从 URL 加载图像并将其可视化:

    library(EBImage)
    
    img = readImage("path/to/your/image/file or URL")
    display(img, method = "raster")
    

    干杯,

    安德烈

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多