動的に画像をサムネイルを使用django)
-
21-09-2019 - |
質問
私は動的に作成しサムネイルに基づくパラメータのURL。例えば、 http://mysite.com/images/1234/120x45.jpg
していく 120x45
サムネイル画像id 1234
.
当然のこはdjangoの景色は、次の操作を実行します:
- 探したキャッシュ版のイメージこのサイズです。
- サムネイルも作成の場合はキャッシュされません(一部ロジックロックだけ1プロセスによりサムネイルその他のプロセスwait).
- パイプの成果を通じてdjango.
るべき仕事が心配です。さん、よdjangoと静ます。どう考えているその他の方法でこの問題なのか。
解決
い利用Djangoの静的コンテンツ。だってサーバールート404要望の画像フォルダをDjangoビューで分割の以外のファイル名を生成するのに適切な画像をサムネイル、前替のURLを望むらくになるレベルではありません404).
その他の回答のdjango-imagekit提案、いいものだ 動的に 生成画像の詳細に基づきURLが、もちろんの使用はお勧めですべての特徴です。
編集:
として実際のURLの構造を感じ、より典型的な /images/filename-120x45.jpg
きをより簡単にフィルターウ404要求を持たない動的なサムネイル。と言うには、たとえばが404エラー /images/original_size_image.jpg
.なりたい方に送られDjangoとして始めたから新築しただけマッチファイル名の形式regex. 【終了しました編集]
ここで注意が必要なのがつうでは誰もが認識し、この特徴を迷惑メールおDjangoアプリです。いる可能性を殺することにより、無数の画像サイズとファイル名の組み合わせます。する必要がある図どの限度額はこれらの要求のように、残念を404場合は寸法が大きいので、どのように実施するかキャップ要求のための複数の寸法と同じイメージです。あこがれだったすぐの場合も"ロック"ものです。
なんだタグ付きApacheはようにすることをお勧めして静的なコンテンツを通じようなもの Nginx.きものを否定の余分なオーバーヘッドの動的な画像要求をご利用の場合の静的ファイルサーバーが完全ではないナメで、静的ファイルです。
他のヒント
このアプリケーションを参照して、親指を生成します。
Tornadowebサーバーを使用して、Pythonで開発されました。
https://github.com/globocom/thumbor
pip install thumbor
素晴らしいアプリケーション
Django ImageKitをご覧ください。http://bitbucket.org/jdriscoll/django-imagekit/wiki/home
私はこれらの答えを調べましたが、彼らが働いているにもかかわらず、彼らは私にとっては柔らかすぎました。サムネイルを手に入れるための迅速で汚い方法が必要な場合は、PILライブラリを使用するだけで良い呼びかけかもしれません。これは私のコードです。
file, ext = os.path.splitext('image.jpg')
im = Image.open('/full/path/to/image.jpg')
im.thumbnail(size, Image.ANTIALIAS)
thumb_path = os.path.join('/full/path/to/thumb/dir/', file + ".thumb" + ".jpeg")
im.save(thumb_path)
PILライブラリをダウンロードしてください ここ
乾杯、これが誰かを助けることを願っています。
あなたは覗くことができます Sorl-Sumbnailのドキュメント. 。私はほとんどすべてのプロジェクトでそれを使用し、からのnginxを使用して静的コンテンツを提供します /media/
dir :)
Djangoのサムネイル貢献に関するこのディスカッションページをご覧ください。
私はまったく同じ問題を抱えていました。交通量の多いサイトで、応答時に数十のサムネイルを生成することは実行不可能です。見てみな: https://github.com/hcarvalhoalves/django-rest-thumbnails
Thumborは確かに素晴らしいサービスです。DjangoでDjango-Thumborを使用できます。
pip install django-thumbor
必要な指定されたディメンションに基づいて、展示されている画像をサイズ変更する必要がある場合があります。 Django ImageFit 図書館はまさにそれを行い、それはまた、収穫の可能性を与えます。
あなたの例では、あなたは書くでしょう {{ 'http://example.com/images/1234.jpg'|resize:'120x45' }}
120x45サイズの画像で終了します。