你在整个blob中加载的事实就是为什么它需要这么长时间,所以你真的只需要加载包含exif数据的图像部分。
当你给exif_read_data
一个文件路径而不是一个blob时,它只默认读取必要的信息。如果这不是一个选项,那么你可能需要一个丑陋的解决方法/破解。
例如,你可以指定一个硬编码值:
$image = base64_encode(file_get_contents('test.jpg'));
echo strlen($image) . '<br />'; // 81684
// only read the first 30000 characters
$exif = exif_read_data('data://image/jpeg;base64,' . substr($image, 0, 30000));
echo '<pre>';
var_dump($exif);
echo '</pre>';
,或者直到合适的大小被发现,你可以动态地增加它:
$image = base64_encode(file_get_contents('test.jpg'));
$read = '8192';
// this will produce errors, so i am suppressing them
while (!$exif = @exif_read_data('data://image/jpeg;base64,' . substr($image, 0, $read))) {
$read += $read;
}
echo '<pre>';
var_dump($exif);
echo '</pre>';
有可能是一个更好的解决方案,但我不知道它是什么。希望有所帮助。
你试过给它一个路径而不是blob吗?''exif_read_data('/ path/to/image.jpg');' –
@mistermartin我只有一个blob。尽管(刚刚测试过),但路径确实快得多。 – Code
尝试只获取需要的标签并禁用解析到数组,在你的情况'exif_read_data($ img,'IFD0',false)' – maximkou