इस सेक्शन में हम देखेंगे कि हमारे पास किस प्रकार की इमेज फाइल है। तो एक स्थिति पर विचार करें, जहां एक डायरेक्टरी में सैकड़ों इमेज फाइलें हैं और हम सभी jpeg (या किसी विशेष इमेज फाइल टाइप) फाइल टाइप प्राप्त करना चाहते हैं। यह सब हम पायथन का उपयोग करके प्रोग्रामेटिकली करने जा रहे हैं।
पायथन इमेज के प्रकार को निर्धारित करने के लिए लाइब्रेरी प्रदान करता है, ऐसी एक लाइब्रेरी imghdr है।
पायथन imghdr पैकेज एक फाइल या बाइट स्ट्रीम में निहित इमेज के प्रकार को निर्धारित करता है।
इंस्टॉलेशन
बहुत संभावना है कि यदि आप पायथन 3.6 या उच्चतर का उपयोग कर रहे हैं, तो imghdr मॉड्यूल एक स्टैंडर्ड पैकेज है और पायथन इंस्टॉलेशन के साथ आएगा।
अपनी मशीन में imghdr इंस्टॉल करने के लिए, बस अपने कमांड टर्मिनल में नीचे दी गई कमांड चलाएं:
pip install imghdr
सफल इंस्टॉलेशन के बाद, यह सत्यापित करने के लिए कि imghdr ठीक से इंस्टॉल है या नहीं, बस अपने पायथन शेल में मॉड्यूल इम्पोर्ट करें।
>>> import imghdr >>>
यदि आपको कोई त्रुटि नहीं मिल रही है, तो इसका मतलब है कि imghdr आपकी मशीन में इंस्टॉल है।
सिंटैक्स
imghdr पैकेज निम्नलिखित फंक्शन को परिभाषित करता है:
imghdr.what(filename[, h])
जहां
- Filename: filename द्वारा नामित फाइल में निहित इमेज डेटा का परीक्षण करता है और इमेज प्रकार का वर्णन करने वाली एक स्ट्रिंग लौटाता है।
- h: यह वैकल्पिक है, यदि h मौजूद है - तो filename को नजरअंदाज कर दिया जाता है और mाना जाता है कि h में टेस्ट करने के लिए बाइट स्ट्रीम है।
नीचे imghdr पैकेज का उपयोग करके पहचाने जाने वाले अनुमत इमेज प्रकार हैं।
| मान | इमेज फॉर्मेट |
|---|---|
| 'rgb' | SGI ImgLib फाइल्स |
| 'gif' | GIF 87a और 89a फाइल्स |
| 'pbm' | पोर्टेबल बिटमैप फाइल्स |
| 'pgm' | पोर्टेबल ग्रेमैप फाइल्स |
| 'ppm' | पोर्टेबल पिक्समैप फाइल्स |
| 'tiff' | TIFF फाइल्स |
| 'rast' | सन रास्टर फाइल्स |
| 'xbm' | X बिटमैप फाइल्स |
| 'jpeg' | JFIF या Exif फॉर्मेट में JPEG डेटा |
| 'bmp' | BMP फाइल्स |
| 'png' | पोर्टेबल नेटवर्क ग्राफिक्स |
लेकिन हम इस वेरिएबल में जोड़कर उन फाइल प्रकारों की सूची बढ़ा सकते हैं जिन्हें imghdr पैकेज पहचान सकता है।
imghdr.tests
इस फंक्शन में व्यक्तिगत परीक्षण करने वाले फंक्शंस की सूची होती है। प्रत्येक फंक्शन दो आर्गुमेंट्स लेता है: बाइट-स्ट्रीम और एक खुला फाइल-जैसा ऑब्जेक्ट। हालांकि, जब what() को बाइट-स्ट्रीम के साथ कॉल किया जाता है, तो फाइल-जैसा ऑब्जेक्ट None होगा।
टेस्ट फंक्शन इमेज प्रकार को स्ट्रिंग के रूप में लौटाएगा अन्यथा यदि यह विफल रहा तो None।
>>> import imghdr
>>> imghdr.what('clock.jpg')
'jpeg'
नीचे imghdr पैकेज का सिर्फ एक इम्प्लीमेंटेशन है, जहां यदि कोई विशेष इमेज फाइल एक्सटेंशन है तो विशेष ऑपरेशन करें:
def identify_filetype(url, imageName, folderName):
session = _setupSession()
try:
# टाइम आउट एक और पैरामीटर है जिसे ट्यून किया गया है
image = session.get(url, timeout=5)
with open(os.path.join(folderName, imageName), 'wb') as fout:
fout.write(image.content)
fileExtension = imghdr.what(os.path.join(folderName, imageName))
if fileExtension is None:
os.remove(os.path.join(folderName, imageName))
else:
newName = imageName + '.' + str(fileExtension)
os.rename(os.path.join(folderName, imageName), os.path.join(folderName, newName))
except Exception as e:
print("failed to download one pages with url of " + str(url))