【问题标题】:Why can't I view or open downloaded PNG file from URL为什么我无法从 URL 查看或打开下载的 PNG 文件
【发布时间】:2021-08-02 21:36:39
【问题描述】:

我已经使用下面的代码下载了一张图片(实际上是几张使用 for 循环的图片)。然而,这些图像并没有打开,尽管它们似乎已经完全下载。事实上,这些图像并没有在普通的照片编辑器或画图等工具中打开。感谢您的意见和应该做什么..

以下是我尝试使用 for 循环的代码:

p <- c("http://assets.pokemon.com/assets/cms2/img/pokedex/full/001.png",
       "http://assets.pokemon.com/assets/cms2/img/pokedex/full/002.png",
       "http://assets.pokemon.com/assets/cms2/img/pokedex/full/003.png",
       "http://assets.pokemon.com/assets/cms2/img/pokedex/full/003_f2.png",
       "http://assets.pokemon.com/assets/cms2/img/pokedex/full/004.png")
p

for (url in p)
  download.file(url, destfile=file.path("C:/Users/xyz/Desktop/test",basename(url)))

library(imager)
# loading only first image for viewing
i <- load.image("C:/Users/xyz/Desktop/test/001.png")
plot(i)

然后我只下载了一个提供简单目标名称的文件,并尝试使用以下代码加载和显示。

download.file("http://assets.pokemon.com/assets/cms2/img/pokedex/full/001.png", 
              destfile=file.path("C:/Users/xyz/Desktop/test","first_img.png"))

i_s <- load.image("C:/Users/xyz/Desktop/test/first_img.png")
plot(i_s)

在这两种情况下,我都会收到以下错误消息。

Error in read.bitmap(file) : 
  File f: C:/Users/xyz/Desktop/test/001.png does not appear to be a PNG, BMP, JPEG, or TIFF

同样,如果我尝试使用照片、照片编辑器、Adobe、Paint 等打开下载的图像,我会收到类似的消息,例如不支持格式、无法加载照片等消息。但是,请注意,如果我只是将图片 url 复制并粘贴到浏览器中,图片会完美地显示在网页中。

感谢您对这里可以做什么的意见。

【问题讨论】:

    标签: r png


    【解决方案1】:

    好像你必须在download.file 中设置mode = "wb"。手册说:

    二进制传输的选择('mode = "wb"' 或 '"ab"')在 Windows 上很重要,因为与 Unix-likes 不同,它确实区分文本和二进制文件,并且对于文本传输更改\n' 行结尾为 '\r\n'(又名 'CRLF')。

    在 Windows 上,如果未提供 'mode' ('missing()') 并且 'url' 以 '.gz'、'.bz2'、'.xz'、'.tgz' 之一结尾, '.zip', '.jar', '.rda', '.rds' 或 '.RData', 'mode = "wb"' 设置为二进制传输以帮助粗心的用户。

    所以对于单个文件试试:

    download.file("http://assets.pokemon.com/assets/cms2/img/pokedex/full/001.png", 
                  destfile=file.path("C:/Users/vsvas/Desktop/test","first_img.png"),
                  mode = "wb")
    

    【讨论】:

    • 非常感谢@GKi。有用。即使对于 for 循环,它也有效。代码将用于 (url in p) download.file(url, destfile=file.path("C:/Users/xyz/Desktop/test",basename(url)), mode="wb")
    猜你喜欢
    • 2019-10-06
    • 1970-01-01
    • 2017-09-18
    • 2012-07-23
    • 2019-11-09
    • 2015-01-03
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多