如何在不将文件加载到内存的情况下获取以像素为单位的图像宽度和高度
How to get image width and height in pixels without loading file in memory
我的问题与 this 非常相似,但我的磁盘上有数千张图像,我想快速读取它们的宽度和高度(以像素为单位),而无需将每个文件加载到内存中。
在我的 Linux 机器上,我可以为每个文件做这样的事情:
path_to_file <- 'img/13600061.jpg'
system(sprintf("file %s", path_to_file), intern = TRUE)
但是 file
的输出对于 jpg、jpeg 和 png 文件可能不同,然后我需要根据文件以不同方式捕获像素信息。我想知道是否已经有通用的快速解决方案。
我认为 exiftool
非常符合要求。它在所有平台上运行,非常可控,而且至关重要的是,它可以自行递归,因此不会产生每个文件启动一次的开销。
作为第一次粗略的尝试,如果处理 PNG 和 JPEG 并从当前目录开始递归,您会想要这样的东西,即 .
exiftool -csv -ImageHeight -ImageWidth -r -ext jpg -ext jpeg -ext png .
示例输出
black.png,80,80
blue.png,80,80
c.jpg,1,1
deskew/skew40.png,800,800
deskew/gradient.png,800,800
如果您正在解析输出,您可能需要添加 -q
以排除摘要。
作为粗略的指导,上述命令在我 Mac.
上包含 10,000 张图像的目录上运行 9 秒
我的问题与 this 非常相似,但我的磁盘上有数千张图像,我想快速读取它们的宽度和高度(以像素为单位),而无需将每个文件加载到内存中。
在我的 Linux 机器上,我可以为每个文件做这样的事情:
path_to_file <- 'img/13600061.jpg'
system(sprintf("file %s", path_to_file), intern = TRUE)
但是 file
的输出对于 jpg、jpeg 和 png 文件可能不同,然后我需要根据文件以不同方式捕获像素信息。我想知道是否已经有通用的快速解决方案。
我认为 exiftool
非常符合要求。它在所有平台上运行,非常可控,而且至关重要的是,它可以自行递归,因此不会产生每个文件启动一次的开销。
作为第一次粗略的尝试,如果处理 PNG 和 JPEG 并从当前目录开始递归,您会想要这样的东西,即 .
exiftool -csv -ImageHeight -ImageWidth -r -ext jpg -ext jpeg -ext png .
示例输出
black.png,80,80
blue.png,80,80
c.jpg,1,1
deskew/skew40.png,800,800
deskew/gradient.png,800,800
如果您正在解析输出,您可能需要添加 -q
以排除摘要。
作为粗略的指导,上述命令在我 Mac.
上包含 10,000 张图像的目录上运行 9 秒