Загрузить изображение с сайта

image r png download jpeg

3555 просмотра

3 ответа

Я пытаюсь добавить изображения химической структуры к некоторым графикам, которые я создал. Я использую базу данных ACToR для доступа к химическим структурам. Например:

введите описание изображения здесь ( http://actor.epa.gov/actor/image?format=png%3Aw250%2Ch250&casrn=80-05-7 )

Хорошая вещь об этом сайте - вы можете изменить размер и химическое вещество в 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))
}

Я попытался использовать readPNGиз pngпакета, и попытался использовать 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 КБ, и в средстве просмотра изображений появляется следующее сообщение: «Средство просмотра фотографий Windows не может открыть это изображение, поскольку файл кажется поврежденным, поврежденным или слишком большим».

Я должен отметить, что я (против моей воли) использую Windows 7. Я также попытался использовать и RStudio, и R. RStudio дал мне предупреждающее сообщение, а R - нет, но R создал то, что выглядит как один и тот же файл (7 КБ) и до сих пор не открывается.

В ответ на @Greg Snow: просто чтобы добавить контекст, я запустил следующее из свежей консоли R в RStudio. Я использовал 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"
Автор: dayne Источник Размещён: 12.11.2019 09:08

Ответы (3)


2 плюса

Решение

Вот подход, который работал для меня для одного изображения (он может быть заключен в функцию, которая будет использоваться в цикле):

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, но тогда это действительно может измениться между файлами).

Автор: Greg Snow Размещён: 23.08.2013 05:57

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")

работал на меня.

Автор: ialm Размещён: 23.08.2013 05:34

1 плюс

Обратите внимание, что пакет Bioconductor R EBImage способен загружать изображения непосредственно с URL-адреса и отображать их:

library(EBImage)

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

Ура,

Andrzej

Автор: aoles Размещён: 20.01.2016 02:27
Вопросы из категории :
32x32