2

ユーザーが画像をアップロードするプロジェクトの1つに取り組んでいます。アップロードした画像はライトボックスで表示されます。

問題は、ユーザーが 5 MB などのサイズの画像をアップロードできることです。このため、読み込みに時間がかかります。そこで、寸法はそのままで画質を落とそうと考えました。

imagejpeg() 関数を使用して、品質が 90 である 3 番目のパラメーターを渡すことができることはわかっています。これにより、ファイル サイズも縮小されます。

すべての画像ファイルのサイズを最大 1 MB にする必要があります。

そのため、最適な品質を得るには、品質としてどの値を渡す必要があるかについて混乱しています。

たとえば。アップロードされた画像ファイルのサイズが 1.2 MB の場合、品質として 90 を渡すとします。これにより、サイズが 1 MB 未満になる可能性があり、品質も許容範囲になります。アップロードされたファイル サイズが 5 MB の場合、品質として 90 を渡す場合よりも、ファイル サイズが 1 MB 未満になることはありません。ここでは、より少ない品質値を渡す必要があります (推測します)。

渡す必要がある最適な品質パラメーターを決定するのに役立つ方法はありますか。

お時間をいただきありがとうございました。

4

1 に答える 1

5

私はしばらく前にこれと同じ種類のものをいじって何年も過ごしました。まず第一に、私は結果を推測するのにかなり厄介であることがわかりました。JPG写真は一般的にPNGにうまく変換されませんが、ベクターjpg画像は一般的にJPGにうまく変換されませんが、写真は変換されます。特にサイズを変更しない場合は、画像が1MBをわずかに下回るようにするのは非常に困難です。サイズを変更しないと、さらに多くの問題が発生します。画像が大きくなるほど、品質は低下します(皮肉なことです)。

各画像のいくつかのバージョンが必要です。説明させてください。

  1. オリジナルを保持したいので、将来いつでもオリジナルに基づいて画像を更新して、後で画像の品質を向上させたり、新しい次元を取得したりすることができます。

  2. ライトボックスで元の画像を使用することは、一般的に悪い考えです。たとえば1024x1024の中に収まるようにサイズを変更することをお勧めします。これはほとんどの場合を満足させる以上のものであり、通常は妥当なファイルサイズになります。その後、必要に応じて、ダウンロードするオリジナルを提供できます。可能な限り最大のファイルを使用すると、通常、画像の読み込みに時間がかかる場合に訪問者が不満を感じることになり、帯域幅の使用によってしばらくすると(同じ理由で)多くの費用がかかる可能性があります。

あなたが求めていることを実行するために私が考えることができる唯一の方法は、ループスルーする恐ろしいコードパフォーマンスを作成し、徐々に品質を下げ、結果の画像サイズをチェックすることです。1 MB未満の画像サイズが見つかると、ループから出て、その品質設定を使用します。しかし、私はこれに反対することを本当にお勧めします。

PSこの回答の範囲外で、私が使用したソリューションの方法論についてコメントで言及しました。

于 2012-10-26T11:07:17.173 に答える