Computer >> Máy Tính >  >> Lập trình >> Python

Xác định loại hình ảnh trong Python?

Trong phần này, chúng ta sẽ xem loại tệp hình ảnh mà chúng ta có. Vì vậy, hãy xem xét một tình huống, trong đó trong một thư mục chúng ta có hàng trăm tệp hình ảnh và chúng ta muốn nhận tất cả loại tệp jgeg (hoặc bất kỳ loại tệp hình ảnh cụ thể nào). Tất cả những điều này chúng tôi sẽ thực hiện theo chương trình bằng python.

Python cung cấp để xác định loại hình ảnh, trên thư viện như vậy là imghdr.

Gói python imghdr xác định loại hình ảnh có trong tệp hoặc luồng byte.

Cài đặt

Có rất nhiều khả năng nếu bạn đang sử dụng python 3.6 trở lên, thì mô-đun imghdr là một gói tiêu chuẩn và sẽ đi kèm với cài đặt python.

Để cài đặt imghdr trong máy của bạn, chỉ cần chạy lệnh dưới đây trong dòng lệnh của bạn:

pip install imghdr

Sau khi cài đặt thành công, để xác minh imghdr có được cài đặt đúng cách hay không, chỉ cần nhập mô-đun vào trình bao python của bạn.

>>> import imghdr
>>>

Trong trường hợp bạn không gặp lỗi, điều đó có nghĩa là imghdr đã được cài đặt trong máy của bạn.

Cú pháp

Gói imghdr định nghĩa hàm sau:

imghdr.what(filename[, h])

Ở đâu

  • Tên tệp :kiểm tra dữ liệu hình ảnh có trong tệp được đặt tên theo tên tệp và trả về một chuỗi mô tả loại hình ảnh.

  • h :Tùy chọn của nó, trong trường hợp h ở đó- thì tên tệp bị bỏ qua và h được giả định là chứa luồng byte để kiểm tra.

Dưới đây là các loại hình ảnh được phép được nhận dạng bằng cách sử dụng gói imghdr.

Giá trị
Định dạng hình ảnh
'rgb'
Tệp SGI ImgLib
'gif'
Tệp GIF 87a và 89a
'pbm'
Tệp Bitmap Di động
'pgm'
Tệp Bản đồ Graym Di động
'ppm'
Tệp Pixmap Di động
'tiff'
Tệp TIFF
'rast'
Tệp Sun Raster
'xbm'
X Tệp Bitmap
'jpeg'
Dữ liệu JPEG ở định dạng JFIF hoặc Exif
'bmp'
Tệp BMP
'png'
Đồ họa Mạng Di động

Nhưng chúng tôi có thể mở rộng danh sách các loại tệp mà gói imghdr có thể nhận ra bằng cách thêm vào biến này.

imghdr.tests

Hàm này chứa danh sách các hàm thực hiện các bài kiểm tra riêng lẻ. Mỗi hàm nhận hai đối số:luồng byte và một đối tượng giống tệp đang mở. Tuy nhiên, khi cái () được gọi với luồng byte, đối tượng giống tệp sẽ là Không.

Hàm kiểm tra sẽ trả về loại hình ảnh dưới dạng một chuỗi khác Không có nếu nó không thành công.

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

Dưới đây chỉ là một triển khai của gói imghdr, trong đó nếu có một số phần mở rộng tệp hình ảnh cụ thể thì sẽ có hoạt động cụ thể:

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))