r - 为什么我无法从 URL 查看或打开下载的 PNG 文件
问题描述
我已经使用下面的代码下载了一个图像(实际上是几个使用 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,图像会完美地显示在网页中。
感谢您对这里可以做的事情的投入。
解决方案
看起来你必须设置mode = "wb"
。download.file
手册说:
二进制传输的选择('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")
推荐阅读
- ubuntu-16.04 - 在 virtualenv 中安装 wx python
- java - 将 CSV 文件读入链接列表 (Java)
- javascript - 对象以逗号分隔。如何用 Javascript 解析它?
- java - Android WebView 使用相机和从存储中捕获和上传视频和图像
- laravel - 在 laravel 5 中更改电子邮件的默认“发件人”字段
- unit-testing - Vue单元测试第三方依赖导致引用错误
- mysql - 使用 except 子句的 SQL
- javascript - TypeError: [c++ 插件类] 不是构造函数
- javafx - javafx - 如果登录详细信息正确,登录函数将执行“else”块,但当详细信息错误时没有任何反应
- c++ - 如何计算文件中的生物数量?