5

現在、ImageMagick を使用して、Web サイトにアップロードされた画像のサイズを判断しています。コマンド ラインで ImageMagick の「identify」を呼び出すと、1MB の JPEG のサイズと、それが JPEG であるという事実を判断するのに約 0.42 秒かかります。少し遅いと思います。

Imagick PHP ライブラリを使用すると、画像を処理する前に 1MB 全体をメモリにロードしようとするため (この場合はサイズとタイプを決定するだけ)、さらに時間がかかります。

任意の画像ファイルのファイル タイプとサイズを決定するこのプロセスを高速化するソリューションはありますか? JPEG と PNG のみをサポートするだけで十分です。ファイルの種類は、拡張子だけでなく、ファイルのヘッダーを見て判断することが重要です。

編集:解決策は、PHPによって呼び出されるコマンドラインツールUNIXである可能性があります。これは、私が現在ImageMagickを使用している方法とよく似ています

4

7 に答える 7

7

GD をサポートする PHP を使用している場合は、getimagesize()を試すことができます。

于 2008-09-18T07:45:08.297 に答える
4

やってみました

identify -ping filename.png

?

于 2008-09-18T08:00:25.373 に答える
3

申し訳ありませんが、これを以前の回答にコメントとして追加することはできませんが、担当者がいません。いくつかの簡単で汚いテストを行ったところ、 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);
}
于 2008-09-18T08:53:01.237 に答える
2

ファイルの種類は、拡張子だけでなく、ファイルのヘッダーを見て判断することが重要です。

そのためには、「file」UNIXコマンド(または同じ機能を実装するphp関数)を使用できます。

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

于 2008-09-18T07:48:43.670 に答える
2

実際には、getimagesize() を使用するために、GD をコンパイルする必要はありません。

mime_content_type() を使用して MIME タイプを取得することもできます。

于 2008-09-18T08:49:10.980 に答える
1

exif_imagetype() は getimagesize() より高速です。

$filename = "somefile";
$data = exif_imagetype($ファイル名);
echo "<PRE>";
print_r($データ);
echo "</PRE>";

出力:

配列 (
        [ファイル名] => somefile
        [FileDateTime] => 1234895396
        [ファイルサイズ] => 15427
        [ファイルタイプ] => 2
        [MimeType] => 画像/jpeg
        [SectionsFound] =>
        [計算済み] => 配列
            (
                [html] => width="229" height="300"
                [高さ] => 300
                [幅] => 229
                [IsColor] => 1
        )
)

于 2009-02-17T18:57:24.027 に答える
0

PHP を使用している場合は、.xml を呼び出すのではなく、Imagick ライブラリを使用することをお勧めしますexec()。あなたが探している機能はImagick::pingImage()です。

于 2013-03-27T11:26:45.297 に答える