এই সেকশনে দেখব কিভাবে প্রোগ্রামেটিক্যালি ইমেজ ফাইলের টাইপ বের করা যায়। মনে করুন, একটি ডিরেক্টরিতে সैकডোন ইমেজ ফাইল আছে এবং আপনাকে শুধু JPEG (বা যেকোনো নির্দিষ্ট টাইপ) ফাইলগুলো বের করতে হবে।
পাইথনে ইমেজ টাইপ নির্ধারণের জন্য একটি লাইব্রেরি রয়েছে: imghdr।
imghdr প্যাকেজ একটি ফাইল বা বাইট স্ট্রিমে থাকা ইমেজের টাইপ নির্ধারণ করে।
ইনস্টলেশন
পাইথন ৩.৬ বা তার উপরের ভার্শন ব্যবহার করলে imghdr স্ট্যান্ডার্ড প্যাকেজ হিসেবে পাইথনের সাথে আসে।
ইনস্টল করতে কমান্ড টার্মিনালে রান করুন:
pip install imghdr
ইনস্টলেশন ভেরিফাই করতে পাইথন শেলে ইম্পোর্ট করুন:
>>> import imghdr >>>
এরর না হলে বুঝবেন ইন্সটল হয়েছে।
সিনট্যাক্স
imghdr.what(filename[, h])
প্যারামিটার
- filename: ফাইলের নাম দিয়ে ইমেজ ডেটা টেস্ট করে এবং ইমেজ টাইপ বর্ণনা করার স্ট্রিং রিটার্ন করে।
- h: অপশনাল। যদি
hথাকে, তবে ফাইলনেম উপেক্ষা করেh-কে বাইট স্ট্রিম ধরে টেস্ট করে।
imghdr দিয়ে সনাক্তযোগ্য ইমেজ ফরম্যাট
| ভ্যালু | ইমেজ ফরম্যাট |
|---|---|
| 'rgb' | SGI ImgLib Files |
| 'gif' | GIF 87a and 89a Files |
| 'pbm' | Portable Bitmap Files |
| 'pgm' | Portable Graymap Files |
| 'ppm' | Portable Pixmap Files |
| 'tiff' | TIFF Files |
| 'rast' | Sun Raster Files |
| 'xbm' | X Bitmap Files |
| 'jpeg' | JPEG data in JFIF or Exif formats |
| 'bmp' | BMP files |
| 'png' | Portable Network Graphics |
imghdr.tests ভেরিয়েবলে ফাংশন অ্যাপেন্ড করে এই লিস্ট বাড়ানো যায়।
imghdr.tests
এই ফাংশনে ইন্ডিভিজুয়াল টেস্ট ফাংশনগুলোর লিস্ট থাকে। প্রতিটি ফাংশন দুটি আর্গুমেন্ট নেয়: বাইট-স্ট্রিম এবং একটি ওপেন ফাইল-লাইক অবজেক্ট। what() বাইট-স্ট্রিম দিয়ে কল করলে ফাইল-লাইক অবজেক্ট None হবে। টেস্ট ফাংশন ইমেজ টাইপ স্ট্রিং হিসেবে রিটার্ন করে, ফেইল করলে None।
সিম্পল উদাহরণ
>>> import imghdr
>>> imghdr.what('clock.jpg')
'jpeg'
ব্যবহারিক উদাহরণ: নির্দিষ্ট এক্সটেনশন থাকলে আপারেশন করা
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))