Image 从网站加载图像

Image 从网站加载图像,image,r,png,download,jpeg,Image,R,Png,Download,Jpeg,我正在尝试将一些化学结构图像添加到我创建的一些图中。我正在使用ACToR数据库访问化学结构。例如: 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%

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

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))
}
()

这个网站的好处是你可以改变url的大小和化学成分,这样我就可以自动抓取图片了。我的希望是存储一个包含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))
}
当我打开图像时,它只有7 KB,我在图像查看器中看到以下消息:“Windows照片查看器无法打开此图像,因为文件似乎已损坏、损坏或太大。”

我应该注意到我(违背我的意愿)正在使用Windows7。我还尝试同时使用RStudio和R。RStudio给了我警告消息,R没有——但R创建了看起来是同一个文件(7KB)的文件,仍然没有打开

为了回应@gregsnow:为了添加一些上下文,我在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"
>库(png)
>搜索()
[1] “.GlobalEnv”“包:png”“工具:rstudio”“包:stats”“包:图形”“包:grDevices”
[7] “包:utils”“包:数据集”“包:方法”“自动加载”“包:基”
>con rawpng关闭(con)
>png1ls()
[1] “con”“rawpng”
(仅将我的评论作为答案发布)

您可以使用
download.file
功能从web下载文件

此外,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")
为我工作。

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

您可以使用
download.file
功能从web下载文件

此外,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")

为我工作。

这里有一种方法对我来说适用于单个图像(它可以包装在循环中使用的函数中):


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

以下是一种对单个图像有效的方法(它可以包装在一个函数中,以便在循环中使用):


需要一些猜测才能得到50000,这可能与其他文件不同(实际上我本应使用48849,但很可能会在不同文件之间更改)。

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

library(EBImage)

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


Andrzej

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

library(EBImage)

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



Andrzej

你看过下载文件了吗?您可以自动将图像下载到您选择的文件夹中,然后使用一些软件包读取png图像文件。@我刚刚尝试使用
download.file
,但收到一条警告消息,图像无法读取。请手动尝试第一个文件,
download.file("http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&casrn=80-05-7“,destfile=“tmp.png”)
,对我有用。你收到了什么警告信息?嗯,这很奇怪。我正在Ubuntu上运行R3.0.1,但我不知道这是否会有什么不同。我会阅读
?下载.file
,并尝试更改一些函数参数。如果失败,可能会有比我更有知识的人能够提供帮助。好的,阅读后使用帮助文件和“我的Windows”框,设置
mode=“wb”
可能会解决您的问题。请尝试
download.file(“http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&casr‌​n=80-05-7“,destfile=“tmp.png”,mode=“wb”)
您看过
?下载.file
?您可以自动将图像下载到您选择的文件夹中,然后使用一些软件包读取png图像文件。@我刚刚尝试使用
下载.file
,但收到警告消息,图像无法读取。请手动尝试第一个文件,
下载.file(“http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&casrn=80-05-7“,destfile=“tmp.png”)
,对我有用。你收到了什么警告信息?嗯,这很奇怪。我正在Ubuntu上运行R3.0.1,但我不知道这是否会有什么不同。我会阅读
?下载.file
,并尝试更改一些函数参数。如果失败,可能会有比我更有知识的人能够提供帮助。好的,阅读后使用帮助文件和“我的Windows”框,设置
mode=“wb”
可能会解决您的问题。请尝试
download.file(“http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&casr‌​n=80-05-7“,destfile=“tmp.png”,mode=“wb”)
谢谢!这只在R中有效,而不是在RStudio中。你知道什么在RStudio中不起作用吗?当我尝试使用RStudio时,我得到以下错误:“readPNG中的错误(rawpng):libpng错误:错误的自适应过滤器值“。我在RStudio支持页面上开始了讨论@dayne,我在实验时收到了一个类似的错误(纯R,不是rstudio),并且没有得到完整的.png文件。同一个文件有错误吗?如果没有,那么可能是大小不同,您需要增加
readBin
读取的字节数。我使用的代码就是这样。我还试着把n增加到100000和150000,这两个数字都给出了相同的错误。我还试着将其设置为48849。它们都没用,但它在RGui中工作。@dayne,这似乎很奇怪。因为我没有下载