你在整個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