ユーザーが画像をアップロードできるアプリケーションがあります。私が使用するテストケースは、サイズが 3872 x 2592px の 1.6MB の jpeg です。バックエンドのアップロード スクリプトは、アップロードされた画像を 6 つの追加形式にサイズ変更します。
- 正方形 (小 75 x 75)
- 親指小(50×38)
- 親指(100×76)
- 小 (240×161)
- 中 (500×378)
- 大(1024×774)
私はそれがたくさんあることを知っていますが、私を信じてください、私はこれが必要です. GD、GD2、または ImageMagick のいずれかを使用してサイズ変更を行う Code Igniter の Image Manipulation クラスを使用してサイズ変更を行います。最初に GD2 を使用するように構成したところ、サイズ変更プロセスの合計に 11 秒かかることに気付きました。
ユーザーはこのプロセスを待たなければならないため、受け入れられません。たくさん読んだ後、ImageMagick がはるかに高速で効率的な操作ライブラリであることを知り、それに切り替えました。
$sourceimage = $data['filedata']['file_path'] . $data['imagedata']['user_id'] . "/" . $imageid . $data['filedata']['file_ext'];
$resize_settings['image_library'] = 'imagemagick';
$resize_settings['library_path'] = '/usr/bin';
$resize_settings['source_image'] = $sourceimage;
$resize_settings['maintain_ratio'] = false;
$resize_settings['quality'] = "100%";
$this->load->library('image_lib', $resize_settings);
驚いたことに、サイズ変更プロセスにかかる時間が長くなりました。具体的には 15 秒です。
ログを見ると、サイズ変更するファイル形式に関係なく、各サイズ変更アクションに 2 秒かかることがわかります。これは、非常に大きい元のサイズから常にサイズを変更しているためだと思います。
サイトの使いやすさが低下するため、サイズ変更プロセスをスケジュールされたプロセスにオフロードするのは嫌いです. これは、ユーザーが画像を見たり操作したりできるようになるまで数分待たなければならないことを意味します。
では、このサイズ変更プロセスを劇的にスピードアップして、リアルタイムで維持できるスマートな方法はありますか? これは私が構築している写真サイトであるため、解像度を下げることはできません。また、言及された6つのフォーマットが本当に必要です。