画像から最大 50,000 の個々のピクセルを読み取る必要があるサイトがあります。これをすばやく行う方法が必要です。現在、22,000 ピクセルの各ピクセルを個別に読み取るには、ほぼ 10 秒かかります。GD がこれを行う最善の方法ではないことはわかっています。大量のピクセルを短時間で読み取る最速の方法は、どの PHP 画像ライブラリですか?
3 に答える
GraphicsMagickを使用できます。
彼らのドキュメントから:
GraphicsMagickは、画像処理のスイスアーミーナイフです。基本パッケージ(またはサードパーティライブラリを含む964K)のソースコードの282K物理行(David A. WheelerのSLOCCountによる)で構成され、画像の読み取り、書き込み、および操作をサポートするツールとライブラリの堅牢で効率的なコレクションを提供しますDPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM、TIFFなどの重要な形式を含む88を超える主要な形式で。
画像処理はOpenMPを使用してマルチスレッド化され(マルチスレッドベンチマークの結果を参照)、プロセッサコアが追加されるとCPUバウンドタスクが線形にスケーリングします。OpenMPをサポートするには、GCC 4.2(またはそれ以降)でコンパイルするか、少なくともOpenMP2.0仕様をサポートするCコンパイラを使用する必要があります。
2002年にImageMagickのソースコードからフォークされました。GMagickという名前のpeclphp拡張機能があり、ImageMagickよりもコマンドラインからの画像処理操作の実行がかなり高速です。
更新: GraphicsMagickはImageMagickよりも高速ですが、GMagickがImagickよりも優れているという意味ではありません。ライブラリの選択は、要件によって異なります。ここにこの主題についての素晴らしいSOの答えがあります:https ://stackoverflow.com/a/5282269/199593
Imagickを試すことができます。実際に速くなるかどうかはわかりませんが。次に例を示します。
<?php
$imagick = new Imagick("my_image.jpeg");
$iterator = $imagick->getPixelIterator();
foreach($iterator as $row => $pixels) {
foreach ($pixels as $column => $pixel) {
// Do something with $pixel
}
$iterator->syncIterator();
}
?>
Gmagickは、それ自体が ImageMagick のフォークであるGraphicsMagickを使いやすくする拡張機能です。
彼らはそれがより速いと主張していますが、私自身はそれを使用していません。