का उपयोग करके छवि आकार (बाइट्स) कैसे प्राप्त करें मुझे पता चला कि छवि आयाम प्राप्त करने के लिए पीआईएल का उपयोग कैसे करें, लेकिन फ़ाइल आकार बाइट्स में नहीं है। मुझे फ़ाइल आकार को यह तय करने की आवश्यकता है कि फ़ाइल डेटाबेस पर अपलोड करने के लिए बहुत बड़ी है या नहीं।पीआईएल
पीआईएल
उत्तर
प्रयास करें:
import os
print os.stat('somefile.ext').st_size
अब पीआईएल का उपयोग करने का कोई तरीका है? –
आपको पीआईएल का उपयोग करने की आवश्यकता क्यों होगी? – thebjorn
यह नियंत्रित करने के लिए कि क्या यह छवि एक नकली छवि शीर्षलेख नहीं है, अपलोड प्रोफ़ाइल बनाने के लिए, और उसके बाद इसे डेटाबेस में संग्रहीत करें, इसलिए यह सुनिश्चित करना स्पष्ट है कि आकार को बाइट्स में आकार प्राप्त करने के लिए पीआईएल में कोई विधि बनाना है? –
मैं थोड़ा इस के लिए देर हो रही है, लेकिन जब खोज कैसे डिस्क में सहेजे बिना एक जनहित याचिका की छवि का आकार पाने के लिए मैं 5 मिनट पहले इस सवाल बारे में जाना।
import StringIO
output = StringIO.StringIO()
image_output.save(output, 'PNG') #a format needs to be provided
contents = output.getvalue()
output.close()
image_filesize = len(contents)
आप पहले से ही फाइल सिस्टम पर छवि है, तो: में और किसी को भी इस मामले भर आता है, यह ऐसा करने का एक आसान तरीका है
import os
os.path.getsize('path_to_file.jpg')`
अगर, हालांकि, आप प्राप्त करना चाहते हैं एक छवि स्मृति में है और फाइल सिस्टम को सहेजा नहीं गया है कि बचाया आकार:
from io import BytesIO
img_file = BytesIO()
image.save(img_file, 'png')
image_file_size = img_file.tell()
इस विधि से अधिक से बचने जाएगा StringIO साथ के रूप में छवि डेटा के पढ़ता है। नोट, हालांकि, यह अधिक रैम का उपयोग करेगा। सब कुछ एक व्यापार है। :-)
संपादित करें: मैं सिर्फ ओपी से इस टिप्पणी को देखा:
अंत में, समस्या अगर किसी को एक तस्वीर है कि 1 गीगा (एक जाली) अपलोड करेंगे, शुरुआत से है वह ' पीआईएल से पहले सर्वर को मार डालेगा, इसकी सामग्री पूरी हो जाएगी, इसलिए इसे समाप्त होने से पहले मुझे अनुरोध को अवरुद्ध करना होगा!
यह एक बहुत ही अलग सवाल है, और शायद वेब सर्वर पर सबसे अच्छा पूरा हो गया है। Nginx के लिए, आप इसे अपनी कॉन्फ़िगरेशन में जोड़ सकते हैं:
http {
#...
client_max_body_size 100m; # or whatever size you want as your limit
#...
}
'बाइट्सियो' विधि डेस्क से आकार प्राप्त करने की तुलना में आकार को कम से कम समझने लगती है। कोई विचार क्यों? – getup8
क्या आप कोई छवि उत्पन्न कर रहे हैं, या डिस्क पर संग्रहीत छवि है? –
फाइल आकार प्राप्त करने के लिए फाइल सिस्टम एपीआई का उपयोग करें, पीआईएल नहीं। – wberry
या 'लेन() ', यदि आपके पास स्मृति में है और फाइल सिस्टम पर नहीं है (जो संभवत: यदि आप किसी डेटाबेस में बीएलओबी के रूप में संग्रहित हो रहे हैं तो लगता है।) – geoffspear