0

私は現在、少なくとも 2 つの引数を取る img() と呼ばれる PHP の関数を持っています。

print img("foo.jpg", 100);

それは次のようなものを返します:

<img src='/cache/foo_XXXXX.jpg' width='100' height='76' />

そのため、この関数は引数を取り、元のファイルのサイズを変更してサーバーにキャッシュ ファイルとして保存し、イメージ タグを返します。明らかに、キャッシュされたバージョンが既に存在する場合は、それを返し、次回のために処理を保存します。

現在、これは 100 件中 99 件のケースで完全に機能しますが、一部のサイトでは画像が非常に多いページがあり、キャッシュされた画像のバージョンは X 日後に期限切れになるため、img() 関数を再作成する必要があります。 50 以上の高解像度画像から小さなサムネイルまで、そのようなページの読み込みには数秒かかるため、これは受け入れられません。

だから私の考えはこれを分離することです。これを行う:

print img("foo.jpg", 100);

これを返します:

<img src='img.php?ARGUMENTS' width='?' height='?' />

つまり、 img() 関数は実際にはファイルをまったく処理せず、サーバー上の静的な画像ファイルではなく、PHP スクリプトから画像を取得するようブラウザに指示する HTML を出力します。

さて、「ARGUMENT」部分にはもちろん、 img() が処理したのと同じ方法で img.php がファイルを処理するために必要なすべての情報が含まれます。おそらく、関数へのすべての引数のシリアル化された文字列バージョンですか?

しかし、問題は画像タグの幅/高さの値です! 処理は現在のスクリプトの範囲外に移動されるため、結果の画像がどのくらいの大きさになるかわかりませんよね? img.php が完了して返されるのが待ちきれません。私は処理にimagemagickを使用しています(したがって、2番目の引数は100、「50%」、「<40」など)であり、おそらくimagemagickで「ドライラン」する方法があります-つまり、imagemagickに結果のサイズを返させる特定のコマンドを使用して特定のファイル?

これをどのように解決しますか?

4

1 に答える 1

0

データベースのどこかにすべての画像のリストがありますよね?幅と高さのフィールドを追加し、HTML の生成中にスケーリングされた幅と高さを計算できます。サムネイルの幅と高さをデータベースに追加することもできます。

于 2012-12-12T11:04:48.557 に答える