PHP 또는 Unix 명령줄에서 이미지 해상도와 파일 형식을 결정하는 가장 빠른 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/90758

문제

저는 현재 웹사이트에 업로드된 이미지의 크기를 결정하기 위해 ImageMagick을 사용하고 있습니다.명령줄에서 ImageMagick의 "식별"을 호출하면 JPEG라는 사실과 함께 1MB JPEG의 크기를 결정하는 데 약 0.42초가 걸립니다.조금 느린 것 같아요.

Imagick PHP 라이브러리를 사용하면 이미지를 처리하기 전에(이 경우 단순히 크기와 유형을 결정하기 전에) 메모리에 전체 1MB를 로드하려고 시도하므로 속도가 더욱 느려집니다.

임의의 이미지 파일의 파일 형식과 크기를 결정하는 프로세스 속도를 높일 수 있는 솔루션이 있습니까?JPEG와 PNG만 지원하여 사용할 수 있습니다.파일 형식은 단순히 확장자가 아닌 파일의 헤더를 보고 결정된다는 것이 나에게 중요합니다.

편집하다:해결책은 제가 현재 ImageMagick을 사용하는 방식과 마찬가지로 PHP에서 호출되는 UNIX 명령줄 도구일 수 있습니다.

도움이 되었습니까?

해결책

죄송합니다. 이전 답변에 댓글로 추가할 수는 없지만 담당자가 없습니다.빠르고 더러운 테스트를 수행한 결과 exec("identify -ping...-ping을 사용하지 않는 것보다 약 20배 빠릅니다.그러나 getimagesize()는 여전히 약 200배 빠른 것으로 보입니다.

그래서 나는 getimagesize()가 더 빠른 방법이라고 말하고 싶습니다.png가 아닌 jpg에서만 테스트했습니다.

시험은 그냥

$files = array('2819547919_db7466149b_o_d.jpg', 'GP1-green2.jpg', 'aegeri-lake-switzerland.JPG');
foreach($files as $file){
  $size2 = array();
  $size3 = array();
  $time1 = microtime();
  $size = getimagesize($file);
  $time1 = microtime() - $time1;
  print "$time1 \n";
  $time2 = microtime();
  exec("identify -ping $file", $size2);
  $time2 = microtime() - $time2;
  print $time2/$time1 . "\n";
  $time2 = microtime();
  exec("identify $file", $size3);
  $time2 = microtime() - $time2;
  print $time2/$time1 . "\n";
  print_r($size);
  print_r($size2);
  print_r($size3);
}

다른 팁

GD 지원과 함께 PHP를 사용하는 경우 시도해 볼 수 있습니다. 이미지 크기 가져오기().

시도해 보셨나요?

identify -ping filename.png

?

파일 형식은 단순히 확장자가 아닌 파일의 헤더를 보고 결정된다는 것이 나에게 중요합니다.

이를 위해 'file' unix 명령(또는 동일한 기능을 구현하는 일부 PHP 함수)을 사용할 수 있습니다.

/tmp$ file stackoverflow-logo-250.png
stackoverflow-logo-250.png: PNG image data, 250 x 70, 8-bit colormap, non-interlaced

실제로 getimagesize()를 사용하려면 다음을 수행해야 합니다. 아니다 GD를 컴파일해야 합니다.

mime_content_type()을 사용하여 MIME 유형을 가져올 수도 있습니다.

EXIF_imagetype()은 getimagesize()보다 빠릅니다.

$filename = "어떤 파일";
$data = EXIF_이미지 유형($filename);
echo "<PRE>";
print_r($data);
에코 "</PRE>";

산출:

Array (
        [FileName] => somefile
        [FileDateTime] => 1234895396
        [FileSize] => 15427
        [FileType] => 2
        [MimeType] => image/jpeg
        [SectionsFound] => 
        [COMPUTED] => Array
            (
                [html] => width="229" height="300"
                [Height] => 300
                [Width] => 229
                [IsColor] => 1
        )
)

PHP를 사용하는 경우 호출보다는 Imagick 라이브러리를 사용하는 것이 좋습니다. exec().당신이 찾고 있는 기능은 Imagick::핑이미지().

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top