Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

กำหนดประเภทของรูปภาพใน Python?


ในส่วนนี้เราจะมาดูประเภทของไฟล์ภาพที่เรามี ดังนั้น ให้พิจารณาสถานการณ์ที่ในไดเร็กทอรี เรามีไฟล์รูปภาพหลายร้อยไฟล์ และเราต้องการรับไฟล์ประเภท jgeg (หรือไฟล์รูปภาพประเภทใดประเภทหนึ่ง) ทั้งหมด ทั้งหมดนี้เราจะทำโดยทางโปรแกรมโดยใช้ python

Python ให้บริการห้องสมุดเพื่อกำหนดประเภทของรูปภาพ ในไลบรารีดังกล่าวคือ imghdr

แพ็คเกจ python imghdr กำหนดประเภทของรูปภาพที่อยู่ในไฟล์หรือไบต์สตรีม

การติดตั้ง

มีโอกาสสูงมากที่หากคุณใช้ python 3.6 หรือสูงกว่า โมดูล imghdr จะเป็นแพ็คเกจมาตรฐาน และจะมาพร้อมกับการติดตั้ง python

ในการติดตั้ง imghdr ในเครื่องของคุณ ให้รันคำสั่งด้านล่างในเทอร์มินัลคำสั่งของคุณ:

pip install imghdr

หลังจากติดตั้งสำเร็จแล้ว เพื่อตรวจสอบว่า imghdr ได้รับการติดตั้งอย่างถูกต้องหรือไม่เพียงแค่นำเข้าโมดูลใน python shell ของคุณ

>>> import imghdr
>>>

ในกรณีที่คุณไม่ได้รับข้อผิดพลาด แสดงว่ามีการติดตั้ง imghdr ในเครื่องของคุณ

ไวยากรณ์

แพ็คเกจ imghdr กำหนดฟังก์ชันต่อไปนี้:

imghdr.what(filename[, h])

ที่ไหน

  • ชื่อไฟล์ :ทดสอบข้อมูลรูปภาพที่มีอยู่ในไฟล์ที่ตั้งชื่อตามชื่อไฟล์และส่งคืนสตริงที่อธิบายประเภทรูปภาพ

  • :เป็นทางเลือก ในกรณีที่มี h- ชื่อไฟล์จะถูกละเว้นและ h จะถือว่ามีสตรีมไบต์ที่จะทดสอบ

ด้านล่างนี้เป็นประเภทรูปภาพที่ได้รับอนุญาตซึ่งรู้จักโดยใช้แพ็คเกจ imghdr

ค่า
รูปแบบรูปภาพ
'rgb'
ไฟล์ SGI ImgLib
'gif'
ไฟล์ GIF 87a และ 89a
'pbm'
ไฟล์บิตแมปแบบพกพา
'pgm'
ไฟล์ Graymap แบบพกพา
'ppm'
ไฟล์ Pixmap แบบพกพา
'tiff'
ไฟล์ TIFF
'rast'
ไฟล์ซันแรสเตอร์
'xbm'
X ไฟล์บิตแมป
'jpeg'
ข้อมูล JPEG ในรูปแบบ JFIF หรือ Exif
'bmp'
ไฟล์ BMP
'png'
กราฟิกเครือข่ายแบบพกพา

แต่เราสามารถขยายรายการประเภทไฟล์ที่แพ็คเกจ imghdr สามารถรับรู้ได้โดยการต่อท้ายตัวแปรนี้

imghdr.tests

ฟังก์ชันนี้ประกอบด้วยรายการฟังก์ชันที่ทำการทดสอบแต่ละรายการ แต่ละฟังก์ชันรับสองอาร์กิวเมนต์:ไบต์สตรีมและอ็อบเจ็กต์ที่เหมือนไฟล์เปิด อย่างไรก็ตาม เมื่อเรียกใช้ what() ด้วย byte-stream ออบเจ็กต์ที่เหมือนไฟล์จะเป็น None

ฟังก์ชันทดสอบจะคืนค่าประเภทรูปภาพเป็นสตริงอื่น ไม่มี หากล้มเหลว

>>> import imghdr
>>> imghdr.what('clock.jpg')
'jpeg'

ด้านล่างนี้เป็นเพียงการนำแพ็คเกจ imghdr ไปใช้งาน โดยที่หากมีส่วนขยายไฟล์อิมเมจเฉพาะบางตัวมีการดำเนินการเฉพาะ:

def identify_filetype(url, imageName, folderName):
   session = _setupSession()
   try:
      # time out is another parameter tuned
      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))