2016-06-07 2 views
1

이 코드를 사용하여 base64 인코딩 된 데이터에서 JPEG 이미지의 Exif 방향을 가져옵니다.너무 느린 Base-64 인코딩 된 이미지에서 Exif 이미지 방향 가져 오기

그러나이 코드는 특히 HD 이미지를 처리 ​​할 때 느립니다. 오리엔테이션을 더 빠르게 할 수있는 방법이 있습니까?


베이스 64로 인코딩 된 문자열 대신 실제 파일 경로를 통과 할 때 훨씬 빠른 것 같다,하지만 이미지가 디스크에없는베이스-64로 인코딩 된 문자열이 내가 가진 전부입니다.

+1

blob 대신 경로를 지정 해 주신 적이 있으신가요? : 'exif_read_data ('/ path/to/image.jpg ');' –

+0

@mistermartin blob 만 있습니다. 실제로 경로를 사용하면 속도가 훨씬 빠릅니다 (방금 테스트되었습니다). – Code

+0

필요한 경우에만 태그를 가져오고 배열에 대한 구문 분석을 비활성화하십시오.'exif_read_data ($ img, 'IFD0', false)' – maximkou

답변

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>'; 

더 나은 해결책이있을 수 있지만, 나는 그것이 무엇인지 모른다. 희망이 도움이됩니다.

+0

더 나은 해결책은'exif_read_data' 대신 수동으로 파일을 읽고 구문 분석하는 것입니다. – Code

관련 문제