Hướng dẫn check file is image python - kiểm tra tệp là hình ảnh python

Cập nhật

Tôi cũng đã thực hiện giải pháp sau trong tập lệnh Python của mình ở đây trên GitHub.

Tôi cũng đã xác minh rằng các tệp bị hỏng [JPG] thường không phải là hình ảnh 'bị hỏng'. Nhưng, việc cắt tập tin gây ra lỗi luôn luôn.

Cập nhật kết thúc

Bạn có thể sử dụng mô -đun Python Pillow [PIL], với hầu hết các định dạng hình ảnh, để kiểm tra xem tệp có phải là tệp hình ảnh hợp lệ và nguyên vẹn không.

Trong trường hợp bạn nhằm mục đích phát hiện hình ảnh bị hỏng, @nadia alramli gợi ý chính xác phương pháp im.verify[], nhưng điều này không phát hiện tất cả các lỗi hình ảnh có thể, ví dụ, im.verify không phát hiện hình ảnh bị cắt ngắn [mà hầu hết người xem thường tải với khu vực màu xám] .does not detect all the possible image defects, e.g., im.verify does not detect truncated images [that most viewers often load with a greyed area].

Gối cũng có thể phát hiện các loại khuyết tật này, nhưng bạn phải áp dụng thao tác hình ảnh hoặc giải mã hình ảnh/recode trong hoặc để kích hoạt kiểm tra. Cuối cùng tôi đề nghị sử dụng mã này:

from PIL import Image

try:
  im = Image.load[filename]
  im.verify[] #I perform also verify, don't know if he sees other types o defects
  im.close[] #reload is necessary in my case
  im = Image.load[filename] 
  im.transpose[Image.FLIP_LEFT_RIGHT]
  im.close[]
except: 
  #manage excetions here

Trong trường hợp lỗi hình ảnh, mã này sẽ tăng một ngoại lệ. Vui lòng xem xét rằng Im.verify nhanh hơn khoảng 100 lần so với thực hiện thao tác hình ảnh [và tôi nghĩ rằng Flip là một trong những biến đổi rẻ hơn]. Với mã này, bạn sẽ xác minh một bộ hình ảnh ở khoảng 10 mbytes/giây với gối tiêu chuẩn hoặc 40 mbyte/giây với mô-đun gối-SIMD [CPU hiện đại 2.5GHz x86_64].

Đối với các định dạng khác XCF, .. bạn có thể sử dụng Wand Wand ImageMagick, mã như sau: Kiểm tra tài liệu đũa phép: Tại đây, để cài đặt: Tại đây

im = wand.image.Image[filename=filename]
temp = im.flip;
im.close[]

Nhưng, từ các thí nghiệm của tôi, WAND không phát hiện ra hình ảnh bị cắt ngắn, tôi nghĩ rằng nó tải thiếu các bộ phận như khu vực màu xám mà không nhắc nhở.

Tôi màu đỏ mà Imagemagick có một lệnh bên ngoài xác định có thể tạo ra công việc, nhưng tôi không tìm thấy cách để gọi chức năng đó theo chương trình và tôi chưa kiểm tra tuyến đường này.could make the job, but I have not found a way to invoke that function programmatically and I have not tested this route.

Tôi đề nghị luôn thực hiện kiểm tra sơ bộ, hãy kiểm tra tệp không phải bằng không [hoặc rất nhỏ], là một ý tưởng rất rẻ:

import os

statfile = os.stat[filename]
filesize = statfile.st_size
if filesize == 0:
  #manage here the 'faulty image' case

Python có nhiều mô -đun trong thư viện tiêu chuẩn của nó. Một cái thường bị bỏ qua là IMGHDR cho phép bạn xác định loại hình ảnh có trong một tệp, luồng byte hoặc đối tượng giống như đường dẫn.

IMGHDR có thể nhận ra các loại hình ảnh sau:imghdr can recognize the following image types:

  • RGB
  • GIF
  • PBM
  • PGM
  • ppm
  • Tiff
  • RAST
  • XBM
  • JPEG / JPG
  • BMP
  • PNG
  • trang web
  • exr

Dưới đây là cách bạn sẽ sử dụng IMGHDR để phát hiện loại hình ảnh của một tệp:

>>> import imghdr
>>> path = 'python.jpg'
>>> imghdr.what[path]
'jpeg'
>>> path = 'python.png'
>>> imghdr.what[path]
'png'

Tất cả những gì bạn cần làm là truyền một đường dẫn đến Imghdr. Điều gì [đường dẫn] và nó sẽ cho bạn biết nó nghĩ loại hình ảnh là gì.imghdr.what[path] and it will tell you what it thinks the image type is.

Một phương pháp thay thế để sử dụng sẽ là sử dụng gói gối mà bạn có thể cài đặt với PIP nếu bạn chưa có.

Đây là cách bạn có thể sử dụng gối:

>>> from PIL import Image
>>> img = Image.open['/home/mdriscoll/Pictures/all_python.jpg']
>>> img.format
'JPEG'

Phương pháp này gần như dễ dàng như sử dụng IMGHDR. Trong trường hợp này, bạn cần tạo một đối tượng hình ảnh và sau đó gọi thuộc tính định dạng của nó. Gối hỗ trợ nhiều loại hình ảnh hơn IMGHDR, nhưng tài liệu không thực sự cho biết nếu thuộc tính định dạng sẽ hoạt động cho tất cả các loại hình ảnh đó.imghdr. In this case, you need to create an Image object and then call its format attribute. Pillow supports more image types than imghdr, but the documentation doesn't really say if the format attribute will work for all those image types.

Dù sao, tôi hy vọng điều này sẽ giúp bạn xác định loại hình ảnh của các tệp của bạn.

Mã nguồn: lib/imghdr.py Lib/imghdr.py

Không dùng nữa kể từ phiên bản 3.11, sẽ bị xóa trong phiên bản 3.13: Mô -đun imghdr được không dùng nữa [xem PEP 594 để biết chi tiết và lựa chọn thay thế].The imghdr module is deprecated [see PEP 594 for details and alternatives].

Mô -đun imghdr xác định loại hình ảnh có trong một tệp hoặc luồng byte.

Mô -đun imghdr xác định chức năng sau:

imghdr.what [file, h = none] ¶what[file, h=None]

Kiểm tra dữ liệu hình ảnh có trong tệp được đặt tên bằng tệp và trả về một chuỗi mô tả loại hình ảnh. Nếu H tùy chọn được cung cấp, đối số tệp bị bỏ qua và H được giả định chứa luồng byte để kiểm tra.

Các loại hình ảnh sau được nhận dạng, như được liệt kê dưới đây với giá trị trả về từ

im = wand.image.Image[filename=filename]
temp = im.flip;
im.close[]
1:

Giá trị

Định dạng hình ảnh

im = wand.image.Image[filename=filename]
temp = im.flip;
im.close[]
2

Các tập tin Imglib SGI

im = wand.image.Image[filename=filename]
temp = im.flip;
im.close[]
3

Tệp GIF 87A và 89A

im = wand.image.Image[filename=filename]
temp = im.flip;
im.close[]
4

Tệp bitmap di động

im = wand.image.Image[filename=filename]
temp = im.flip;
im.close[]
5

Các tập tin graymap di động

im = wand.image.Image[filename=filename]
temp = im.flip;
im.close[]
6

Tệp pixmap di động

im = wand.image.Image[filename=filename]
temp = im.flip;
im.close[]
7

TIFF FILE

im = wand.image.Image[filename=filename]
temp = im.flip;
im.close[]
8

Các tập tin raster mặt trời

im = wand.image.Image[filename=filename]
temp = im.flip;
im.close[]
9

X Tệp bitmap

import os

statfile = os.stat[filename]
filesize = statfile.st_size
if filesize == 0:
  #manage here the 'faulty image' case
0

Dữ liệu JPEG ở định dạng JFIF hoặc EXIF

import os

statfile = os.stat[filename]
filesize = statfile.st_size
if filesize == 0:
  #manage here the 'faulty image' case
1

Tệp BMP

import os

statfile = os.stat[filename]
filesize = statfile.st_size
if filesize == 0:
  #manage here the 'faulty image' case
2

Biểu đồ minh họa mạng lưới không dây

import os

statfile = os.stat[filename]
filesize = statfile.st_size
if filesize == 0:
  #manage here the 'faulty image' case
3

Tệp web

import os

statfile = os.stat[filename]
filesize = statfile.st_size
if filesize == 0:
  #manage here the 'faulty image' case
4

Các tập tin openexr

Mới trong phiên bản 3.5: Các định dạng EXR và trang web đã được thêm vào.The exr and webp formats were added.

Bạn có thể mở rộng danh sách các loại tệp imghdr có thể nhận ra bằng cách nối thêm biến này:

imghdr.tests¶tests

Một danh sách các chức năng thực hiện các bài kiểm tra riêng lẻ. Mỗi hàm có hai đối số: luồng byte và một đối tượng giống như tệp mở. Khi

im = wand.image.Image[filename=filename]
temp = im.flip;
im.close[]
1 được gọi bằng luồng byte, đối tượng giống như tệp sẽ là
import os

statfile = os.stat[filename]
filesize = statfile.st_size
if filesize == 0:
  #manage here the 'faulty image' case
7.

Hàm thử nghiệm sẽ trả về một chuỗi mô tả loại hình ảnh nếu thử nghiệm thành công hoặc

import os

statfile = os.stat[filename]
filesize = statfile.st_size
if filesize == 0:
  #manage here the 'faulty image' case
7 nếu nó thất bại.

Example:

>>> import imghdr
>>> imghdr.what['bass.gif']
'gif'

Làm thế nào để bạn kiểm tra xem một tệp là một python hình ảnh?

Tất cả những gì bạn cần làm là truyền một đường dẫn đến Imghdr. Điều gì [đường dẫn] và nó sẽ cho bạn biết nó nghĩ loại hình ảnh là gì.pass a path to imghdr. what[path] and it will tell you what it thinks the image type is.

Làm cách nào để xác định một hình ảnh trong Python?

Làm thế nào để nhận dạng hình ảnh hoạt động trong Python..
Lớp tích chập: Mục đích: Phát hiện các tính năng nhất định trong hình ảnh.....
Trở chỉnh Relu: Mục đích: Tăng tính phi tuyến tính của hình ảnh để chúng có thể dễ dàng tách rời.....
Lớp gộp tối đa: Mục đích: Phân biệt các tính năng nếu chúng bị biến dạng.....
Làm phẳng.....
Lớp kết nối đầy đủ ..

Làm thế nào để tôi biết nếu hình ảnh của tôi là JPEG hay PNG?

Nếu bạn gặp rắc rối và muốn kiểm tra xem ảnh của bạn có phải là JPEG hay không, hãy xem chữ viết dưới ảnh trong tên tệp của nó.Nếu nó kết thúc.jpg hoặc.JPEG- thì tệp là một JPEG và sẽ tải lên.look at the writing under the photo in its file name. If it ends . jpg or . jpeg- then the file is a JPEG and will upload.

Làm cách nào để kiểm tra xem một tệp có tồn tại trong Python không?

Trong Python, bạn có thể kiểm tra xem một số tệp hoặc thư mục có tồn tại bằng các phương thức ISFILE [] và ISDIR [] hay không.Tuy nhiên, nếu bạn sử dụng isfile [] để kiểm tra xem một thư mục nhất định có tồn tại hay không, phương thức sẽ trả về sai.Tương tự như vậy, nếu bạn sử dụng nếu isdir [] để kiểm tra xem một tệp nhất định có tồn tại hay không, phương thức trả về sai.isfile[] and isdir[] methods, respectively. However, if you use isfile[] to check if a certain directory exists, the method will return False. Likewise, if you use if isdir[] to check whether a certain file exists, the method returns False.

Bài Viết Liên Quan

Chủ Đề