2014-02-19 84 views
1

我想我要求的是不可能的,但会问无论如何...
我有一个文件夹(有几个子文件夹),其中包含大量的图像在JPG和PNG格式。我需要一个工具来创建这些文件的列表,包括它们的尺寸。 (宽度和高度)。为此,我可以将图像加载到位图并读取宽度/高度属性。如果图像本身不是那么庞大的话,这将是可以的...
标准图像大小约为800万像素,但大约10%是在400万像素和100万像素之间。 (是的,这是10,000x10,000像素。)这意味着我正在处理每个50到100 MB的PNG文件。总共有7,500个图像,这意味着我的工具阅读大量文件数据非常繁忙。
我需要更快的方式来读取这些文件类型的尺寸。不是因为内存的使用,因为我的系统有32 GB的内存,但因为我不想等待45分钟才能完成索引......(好吧,稍微夸张一点,但速度不是很快。)如何获得图像的尺寸而不加载图像

回答

1

你有一个完整的文章和工作代码在下面的链接(CodeProject)。

http://www.codeproject.com/Articles/35978/Reading-Image-Headers-to-Get-Width-and-Height

他正在读的头信息来获取图像的尺寸。性能看起来不错。

+0

看起来不错。完整的代码位于注册墙后面,因此其他人无法访问。此外,该文章称,它似乎不适用于所有图像,因此他需要一个try/catch结构。 所以也许有人有一个更好的例子? –

0

看看jhead here。或exiv2,参见here

它非常快,你可以使用像“system()”的东西来运行它并解析输出。

输出示例:

File name : b.jpg 
File size : 643664 bytes 
File date : 2014:02:19 13:07:29 
Camera make : NIKON CORPORATION 
Camera model : NIKON D2Xs 
Date/Time : 2007:08:01 11:02:28 
Resolution : 1200 x 797 
Flash used : No 
Focal length : 28.0mm (35mm equivalent: 42mm) 
Exposure time: 0.0016 s (1/640) 
Aperture  : f/7.1 
ISO equiv. : 250 
Whitebalance : Auto 
Metering Mode: center weight 
Exposure  : shutter priority (semi-auto) 
GPS Latitude : N 52d 13.3690m 0s 
GPS Longitude: W 0d 52.7070m 0s 
GPS Altitude : 456.00m 

Exiv2处理PNG文件,以及,是C调用的库,所以也许更优雅。

+0

我真的不想分析另一个应用程序的输出,也不喜欢从我的代码中调用第三方库。它不仅需要读取图像大小,还需要构建这些图像的目录。我的项目将按需创建缩略图,但需要显示具有原始图像宽度/高度的网格。 (没有缩略图。) –