现今有许多文件格式(音频、视频、图像、文本)。我希望编写一段PHP代码,可以获取文件的元数据,而不管其格式如何。
要获取基本的元数据(文件名、文件大小、文件类型和上次修改日期),可以使用文件系统API:
<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>
<script>
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
// files is a FileList of File objects. List some properties.
var output = [];
for (var i = 0, f; f = files[i]; i++) {
output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</li>');
}
document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
但是,我希望从文件中提取尽可能多的信息(每个可能的元数据)。
例如:对于一个jpg图像,在提取其元数据时,我可以获取以下内容(使用exif标签):
FILE.FileName: idfo1.jpg
FILE.FileDateTime: 1369637595
FILE.FileSize: 126948
FILE.FileType: 2
FILE.MimeType: image/jpeg
FILE.SectionsFound: ANY_TAG, IFD0, EXIF
COMPUTED.html: width="915" height="1246"
COMPUTED.Height: 1246
COMPUTED.Width: 915
COMPUTED.IsColor: 1
COMPUTED.ByteOrderMotorola: 1
COMPUTED.ApertureFNumber: f/2.6
COMPUTED.UserComment:
IFD0.ImageWidth: 2048
IFD0.ImageLength: 1536
IFD0.Make: SAMSUNG
IFD0.Model: GT-S5830
IFD0.Software: S5830DXKPD
IFD0.DateTime: 2012:06:06 10:18:24
IFD0.YCbCrPositioning: 1
IFD0.Exif_IFD_Pointer: 2232
IFD0.UndefinedTag:0xEA1C: ê
EXIF.ExposureTime: 1/229
EXIF.FNumber: 26/10
EXIF.ExposureProgram: 3
EXIF.ISOSpeedRatings: 50
EXIF.ExifVersion: 0220
EXIF.DateTimeOriginal: 2012:06:06 10:18:24
EXIF.DateTimeDigitized: 2012:06:06 10:18:24
EXIF.MaxApertureValue: 30/10
EXIF.MeteringMode: 3
EXIF.Flash: 0
EXIF.FocalLength: 355/100
EXIF.UserComment:
EXIF.ColorSpace: 1
EXIF.ExifImageWidth: 2048
EXIF.ExifImageLength: 1536
EXIF.ExposureMode: 0
EXIF.WhiteBalance: 0
EXIF.SceneCaptureType: 0
EXIF.UndefinedTag:0xEA1C: ê
如果可能的话,我希望能获取地理标记数据。类似地,对于视频和音频文件类型,我希望能获取以下信息:
- 比特率(音频和视频) - 时长 - 文件创建日期 - 注释 - 帧尺寸等
是否有任何可以直接为我完成此操作的 PHP 或 JavaScript 代码?