我使用此代码从其base64编码数据中获取JPEG图像的Exif方向。
$exif = exif_read_data('data://image/jpeg;base64,' . $base64EncodedImageData);
$orientation = $exif['Orientation'];
然而,这段代码很慢,特别是在处理高清图像时。有没有办法更快地获得方向?
传递实际的文件路径而不是base-64编码的字符串似乎要快得多,但是图像不在磁盘上,而且我只有base-64编码的字符串。
答案 0 :(得分:2)
你在整个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>';
可能有更好的解决方案,但我不知道它是什么。希望有所帮助。