4

ユーザーがプロフィール画像をアップロードするソーシャルネットワークを作成しています。

この画像は、150/150ピクセルのサイズでプロフィールページで使用されます。

ホームページ、つまりユーザーアクティビティフィードでは、同じ画像を75/75ピクセルにする必要があります。

これを行うためのベストプラクティスは何でしょうか

  1. その場で画像のサイズを変更します(timthumb)。
  2. 画像のサイズを変更してサーバーに保存します。
4

4 に答える 4

3

写真をアップロードするときに、必要なサムネイルのセットを作成し、[image_name] thumb [size_name].jpgなどとして保存します。

uploaded: file.jpg
medium: file_thumb_150x150.jpg
small: file_thumb_75x75.jpg

命名規則はあなた次第ですが、必要なデータにすばやく簡単にアクセスできます。サーバーを使用してオンザフライで生成したり、ブラウザーでスケーリングしたりする必要はありません。

于 2011-05-16T04:50:31.837 に答える
2

私はこの問題にしばらく取り組んできましたが、これを行う3つの主な方法に出くわしました。

  1. バックグラウンドプロセスとして、アップロードの時点でサムネイル画像を生成します。
  2. メインアプリケーションを介してオンデマンドで画像を生成する
  3. URLをAPIとして使用してオンデマンドで画像を生成する

それぞれのアプローチには長所と短所があります。

  1. このアプローチは最も制限が厳しく、アップロード後すぐにサムネイルを生成できるように、サムネイルのすべての用途とサイズを事前に知っておく必要があります。主な利点は、nginxなどのサーバーを使用して画像を効率的に提供でき、他の静的リソースとまったく同じであるということです。
  2. Djangoにはsorl-thumbnailというライブラリがあり、必要に応じてあらゆる種類のサムネイルを生成するためのテンプレートタグを提供します。高速のキー/値ストアを使用して、生成されたサムネイルを追跡し、ソース画像が変更されたことを検出すると、古くなった生成画像を自動的に無効にします。次に、テンプレートタグは、生成された画像のURLを返します。このURLは、スクリプトレイヤーを経由せずにnginxから直接提供できます。1よりも柔軟性がありますが、(たとえば)JavaScriptを使用して画像のURLを生成し、それが存在することを期待することはできません。これは、Webサイトのバックエンドコードまたはテンプレートによって実行する必要があります。
  3. 完全に動的で柔軟性があり、URLを微調整するだけで、必要なバージョンの画像を取得できます。Amazonは、これらすべてのプレースホルダー画像生成Webサイトと同様に、この方法を使用します。JavaScriptでURLを生成し、好きなことをすることができます。Webサイト自体は、URLを生成するためのいくつかのヘルパーメソッドを除いて、サムネイルレイヤーの知識を必要としません。しかし、これは明らかに最もリソースを消費する方法であり、アーキテクチャが負荷を処理できることを確認する必要があります。タイムリーにキャッシュを無効にしたり、サイズ変更スクリプトなどで不要なヒットを回避したりするには、本のすべてのトリックを使用する必要があります。

私は3番目の方法の大ファンです。画像の生成をメインのウェブサイトの機能から完全に分離するのが好きで、かなりの柔軟性が好きですが、構成に関しては何をしているのかを知る必要があります。それを処理するサーバー。

于 2011-05-19T19:41:19.553 に答える
0

私がしていることをお話します。私は常にフルサイズの画像を保存しますが、先行ゼロを使用してdbIDを使用して名前を変更します。最初の使用では、サムネイルを作成して他のフォルダーに保存し、次の呼び出しで使用します。

于 2011-05-16T04:51:34.367 に答える
0

サーバーのスペースと帯域幅が問題になる場合は、cdnの使用を検討する必要があります。

アマゾンは良いサービスを持っています、

于 2011-05-16T04:52:15.303 に答える