Hướng dẫn python check valid image - python kiểm tra hình ảnh hợp lệ

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 = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
6, 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 = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
7 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 một khu vực màu xám) .does not detect all the possible image defects, e.g.,
im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
7 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 has many modules in its standard library. One that is often overlooked is imghdr which lets you identify what image type that is contained in a file, byte stream or path-like object.

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
  • webp
  • 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.

An alternative method to use would be to use the Pillow package which you can install with pip if you don't already have it.

Here is how you can use Pillow:

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

This method is almost as easy as using 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.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.

Anyway, I hope this helps you in identifying the image type of your files.

Nội dung chính

  • Bảng toán tử logic trong python python
  • Toán tử logic AND trong python
  • Toán tử logic OR trong python
  • Toán tử logic NOT trong python
  • Thứ tự ưu tiên toán tử logic trong python
  • Ứng dụng của toán tử logic trong python
  • Tổng kết

Hướng dẫn cách sử dụng toán tử logic trong python. Bạn sẽ học được các phép toán logic trong python được biểu diễn thông qua các toán tử logic trong python sau bài học này.toán tử logic trong python. Bạn sẽ học được các phép toán logic trong python được biểu diễn thông qua các toán tử logic trong python sau bài học này.

Bảng toán tử logic trong python python

Toán tử logic AND trong pythonphép toán logic trong python, chúng ta sử dụng các toán tử logic trong python được liệt kê trong bảng dưới đây:

Toán tử logic OR trong pythonToán tử logic NOT trong pythonThứ tự ưu tiên toán tử logic trong python
Ứng dụng của toán tử logic trong pythonTổng kếtHướng dẫn cách sử dụng toán tử logic trong python. Bạn sẽ học được các phép toán logic trong python được biểu diễn thông qua các toán tử logic trong python sau bài học này.
Để thực hiện các phép toán logic trong python, chúng ta sử dụng các toán tử logic trong python được liệt kê trong bảng dưới đây:Toán tửBiểu thức
Ý nghĩaAND X and Y

True nếu cả X và Y đều đúng sẽ kiểm tra hai vế của toán tử logic là đúng hay sai và kết hợp chúng lại để đưa ra kết quả. Kết quả của phép toán logic trong python sẽ là kiểu boolean trong python với hai giá trị là True (đúng) hoặc False (sai).

Toán tử logic AND trong python

Toán tử logic OR trong python

Toán tử logic NOT trong python
True  and False = False
False and True  = False
False and False = False

Thứ tự ưu tiên toán tử logic trong python

Ứng dụng của toán tử logic trong python

print(2 < 10 and 2 < 40)


print(2 < 10 and 2 > 40)

Tổng kết

num = 20

print((num > 10 and num < 40))


print((num > 10 and num > 40))

Toán tử logic OR trong python

Toán tử logic NOT trong python

Thứ tự ưu tiên toán tử logic trong python
True  or False = True
False or True  = True
False or False = False

Về quy trình xử lý, toán tử logic OR trong python sẽ ngược lại so với toán tử logic AND. Toán tử logic OR sẽ kiểm tra biểu thức X bên vế trái trước. Nếu X True thì trả về giá trị của X. Nếu X False thì trả về giá trị của Y.


Ví dụ cụ thể về sử dụng toán tử logic OR trong python như sau:
print(2 < 10 or 2 < 40)


print(2 < 10 or 2 > 40)


print(2 > 10 or 2 > 40)

Bạn cũng có thể sử dụng toán tử logic AND trong python với biến như sau:

num = 20

print((num > 10 or num < 40))


print((num > 10 or num > 40))


print((num < 10 or num > 40))

Toán tử logic NOT trong python

Toán tử logic NOT hay còn gọi là toán tử logic phủ đinh trong python sẽ trả về kêt quả True nếu một trong hai vế đúng, và False nếu cả hai vế đều sai.

not True  = Falsenot False = True
not False = True

Ví dụ cụ thể về sử dụng toán tử logic NOT trong python như sau:

print(not 2 < 40) 


print(not 2 > 40)


print(not 2 > 40)

Bạn cũng có thể sử dụng toán tử logic NOT trong python với biến như sau:

im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
0

Thứ tự ưu tiên toán tử logic trong python

Trong trường hợp có nhiều toán tử logic trong python cùng tồn tại trong một biểu thức thì thứ tự ưu tiên xử lý của chúng như sau:

im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
8 >
im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
9 >
import os

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

Nói cách khác, toán tử

im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
8 có mức độ ưu tiên cao nhất trong các toán tử logic python.Ví dụ:
Ví dụ:

im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
1

Để thay đổi thứ tự ưu tiên các toán tử này trong biểu thức, chúng ta sử dụng tới cặp dấu ngoặc

import os

statfile = os.stat(filename)
filesize = statfile.st_size
if filesize == 0:
  #manage here the 'faulty image' case
2 như sau:

im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
2

Lại nữa, do các toán tử so sánh như

import os

statfile = os.stat(filename)
filesize = statfile.st_size
if filesize == 0:
  #manage here the 'faulty image' case
3 hoặc
import os

statfile = os.stat(filename)
filesize = statfile.st_size
if filesize == 0:
  #manage here the 'faulty image' case
4 có thứ tự ưu tiên cao hơn các toán tử logic trong python, nên bạn không cần sử dụng tới các dấu ngoặc khi viết chúng cùng trong một biểu thức.

im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
3
  • Về thứ tự ưu tiên của các toán tử trong python, bạn có thể tìm hiểu thêm tại bài viết Thứ tự ưu tiên toán tử trong python

Ứng dụng của toán tử logic trong python

Toán tử logic trong python thường được sử dụng trong các biểu thức điều kiện trong các lệnh điều kiện if hoặc là trong vòng lặp. Trong các bài tiếp theo về các chuyên đề này, chúng ta sẽ gặp chúng nhiều hơn.

Còn sau đây là một số ví dụ cụ thể về sử dụng toán tử trong python để các bạn tham khảo nhé.

Ví dụ 1: Sử dụng toán tử logic trong lệnh điều kiện if

im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
4

Ví dụ 2: Sử dụng toán tử logic trong vòng lặp while

im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
5

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về cách sử dụng toán tử logic trong python rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.toán tử logic trong python rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về python trong các bài học tiếp theo.

Viết bởi Kiyoshi. Đã đăng ký bản quyền tác giả tại Creativecommons và DMCA