2010-01-21 17 views
8

मैं URL में पैरामीटर के आधार पर गतिशील रूप से थंबनेल बनाना चाहता हूं। उदाहरण के लिए, http://mysite.com/images/1234/120x45.jpg छवि आईडी 1234 के लिए 120x45 थंबनेल बनाएगा। इस आकार में छवि के एक पहले से कैश किए गए संस्करण के लिएगतिशील रूप से छवि थंबनेल बनाएं (django का उपयोग करके)

  1. देखो:

    यह करने के लिए स्पष्ट समाधान एक Django दृश्य जो निम्नलिखित करता है।

  2. यदि यह कैश नहीं किया गया है तो थंबनेल बनाएं (लॉकिंग के लिए कुछ तर्क ताकि केवल 1 प्रक्रिया थंबनेल और अन्य प्रक्रियाओं को प्रतीक्षा करे)।
  3. django के माध्यम से परिणाम पाइप करें।

इसे "काम" करना चाहिए, लेकिन मैं प्रदर्शन के बारे में चिंतित हूं। मुझे स्थिर सामग्री की सेवा के लिए django का उपयोग करने का विचार पसंद नहीं है। इस समस्या को पूरा करने के कुछ अन्य तरीके क्या हैं?

+0

आप गतिशील, थंबनेल बना रहे हैं, तो यह वास्तव में स्थिर नहीं रहती तो यह क्या है? –

+0

मुझे लगता है कि यह एक आलसी लोड स्थिर स्थिर थंबनेल के रूप में है। एक बार यह बनने के बाद, मुझे वही प्रदर्शन चाहिए जैसे कि यह स्थैतिक था। – Gattster

उत्तर

8

आपको स्थिर सामग्री को सीधे सेवा देने के लिए Django का उपयोग करने की आवश्यकता नहीं है। बस अपने सर्वर फ़ोल्डर को डीजेगो व्यू के लिए 404 अनुरोधों को रूट करें, जहां यह फ़ाइल नाम को अलग करता है और उचित यूआरएल पर वापस रीडायरेक्ट करने से पहले उचित थंबनेल उत्पन्न करता है (जो उम्मीद है कि अब 404 नहीं होगा)।

अन्य सवाल का जवाब के Django-imagekit सुझाव की बात है, मुझे यकीन है कि यह आप गतिशील यूआरएल के आधार पर छवि अंगूठे उत्पन्न जाने के लिए कुछ भी नहीं हूँ, लेकिन मैं निश्चित रूप से सभी सुविधाओं यह है के लिए उपयोग करने की सिफारिश करते हैं।

संपादित करें:

वास्तविक URL संरचना का सवाल है, मैं एक और अधिक विशिष्ट /images/filename-120x45.jpg लगता है कि आप और अधिक आसानी से 404 अनुरोध गतिशील थंबनेल पीढ़ी के साथ कुछ नहीं करना है कि बाहर फिल्टर करने के लिए अनुमति होगी। उदाहरण के लिए, कहें कि /images/original_size_image.jpg के लिए 404 त्रुटियां हैं। आप नहीं चाहते कि वे Django पर जा रहे हों, और आप केवल उस प्रारूप के फ़ाइल नामों को रेगेक्स से मेल कर सकते हैं। [अंत संपादन]

आपको इस सुविधा के बारे में किसी को भी जागरूक करने के बारे में सावधान रहना होगा, हालांकि आपके Django ऐप को स्पैम करें। वे संभावित रूप से इसे छवि आकार और फ़ाइल नाम संयोजनों की असीमित संख्या के साथ अपनी उंगलियों पर मार सकते हैं। आपको इन अनुरोधों पर ऊपरी सीमाएं कैसे रखनी होंगी, जैसे 404 पर रीडायरेक्ट करना, या तो आयाम मूल से बड़ा है, या यहां तक ​​कि यह भी पता लगाना कि एक ही छवि के कई आयामों के लिए अनुरोध कैप करना है। हो सकता है कि यह वही था जो आप "लॉकिंग" का उल्लेख करते समय प्राप्त कर रहे थे।

एक तरफ, मुझे लगता है कि आपने अपाचे को टैग किया है लेकिन मैं वास्तव में यह सिफारिश करना चाहूंगा कि आप Nginx जैसे किसी के माध्यम से स्थिर सामग्री की सेवा करें। यदि आप एक स्थैतिक फ़ाइल सर्वर का उपयोग करते हैं जो स्थिर फ़ाइलों की सेवा करने पर पूर्ण बकवास नहीं है तो आप गतिशील छवि अनुरोधों के अतिरिक्त ओवरहेड को अस्वीकार कर सकते हैं।

+0

ग्रेट उत्तर। स्पैम समस्या का एक समाधान अनुमत छवि/थंबनेल आकार की पूर्वनिर्धारित सूची होना है। इसके अलावा, मैं nginx पर सहमत हूँ। मैं वर्तमान में स्थिर सामग्री की सेवा के लिए nginx का उपयोग कर रहा हूं और इस प्रश्न में nginx टैग जोड़ दूंगा। – Gattster

+0

आह, हाँ ... लेकिन मुझे यकीन नहीं था कि कैसे "गतिशील" अनुमति आकारों की पूर्वनिर्धारित सूची आपके लिए होगी, इसलिए मैंने इसका उल्लेख नहीं किया। मैं आपके छवि प्रारूपों से भी अनिश्चित था और यदि वे लगातार या मानक अनुपात हैं, या यदि आप अंगूठे को फसल करने की योजना बना रहे थे, तो यदि यह पूर्वनिर्धारित आकार आदि फिट नहीं होना चाहिए, तो भी, मैं क्षणिक रूप से अपना जवाब संपादित करूँगा आपके द्वारा चर्चा किए गए यूआरएल प्रारूप के बारे में कुछ जोड़ने के लिए। – jonwd7

+0

मैं इसके लिए बोतल का उपयोग कर रहा हूं लेकिन यह उसी सिद्धांत का उपयोग करके काम करता है। यह बहुत अच्छा है कि यह इस तरह से काम करता है। –

4

आप sorl भी कोशिश कर सकते हैं, इसका उपयोग Satchmo द्वारा किया जा रहा है।

2

आप the sorl-thumbnail documentation पर एक चोटी ले सकते हैं।मैं लगभग सभी अपनी परियोजनाओं के में इसका इस्तेमाल एक साथ /media/ dir से Nginx साथ स्थैतिक सामग्री की सेवा के साथ :)

2

मैं इन उत्तरों को देखा और फिर भी वे काम करते हैं वे अभी भी मेरे लिए sofisticated रहे थे। तुम सिर्फ सिर्फ जनहित याचिका लाइब्रेरी का उपयोग कर एक अच्छा कॉल हो सकता है, थंबनेल प्राप्त करने के लिए एक त्वरित और गंदा तरीका चाहते हैं, यह मेरा कोड है:

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) 

डाउनलोड जनहित याचिका पुस्तकालय here

चीयर्स, इस उम्मीद किसी की मदद करता है।

0

चेक आउट Django के लिए थंबनेल योगदान के बारे में इस चर्चा पेज:

https://code.djangoproject.com/wiki/ThumbNails

+0

उत्तर जिनमें केवल लिंक हैं [खराब अभ्यास माना जाता है] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links- कहीं--ally- good-answers)। कृपया यहां सामग्री को सारांशित करें (प्रतिलिपि/पेस्ट न करें) ताकि उत्तर स्वयं ही खड़ा हो। यदि आप अपने उत्तर को हटाने का जोखिम नहीं चलाते हैं, खासकर यदि लिंक कभी मर जाता है। –

4

अंगूठे उत्पन्न करने के लिए इस आवेदन मिलते हैं।

टर्नडोब सर्वर का उपयोग करके पायथन में विकसित किया गया।

https://github.com/globocom/thumbor

pip install thumbor 

महान आवेदन

+0

थंबोर वास्तव में ओपी चाहता है सब कुछ करता है। –

0

मैं एक ही सटीक समस्या थी: एक उच्च यातायात साइट में, प्रतिक्रिया समय में थंबनेल के दर्जनों पैदा नहीं संभव है, सब अतीत के लिए थंबनेल जनरेट करने के रूप में किया जाता है बैच में सामग्री, इसलिए मैंने इसके लिए एक ऐप बनाया। इसे देखें: https://github.com/hcarvalhoalves/django-rest-thumbnails

0

थंबोर वास्तव में एक महान सेवा है, आप django पर django-thumbor का उपयोग कर सकते हैं। यहाँ

pip install django-thumbor 

रेपो: https://github.com/ricobl/django-thumbor

संबंधित मुद्दे