PHP imagemagick kiểm tra xem tệp có phải là hình ảnh không

Kể từ ngày 25 tháng 2 năm 2020, các máy chủ dành cho khách hàng WordPress có phần mở rộng PHP cho phép sử dụng trí tưởng tượng từ mã PHP

ImageMagick cho phép bạn tự động tạo và chỉnh sửa hình ảnh trên máy chủ. Nó sẽ cần được chạy từ dòng lệnh vì không có API nào được cài đặt. ImageMagick đã có sẵn để sử dụng trên các máy chủ. Nó được đặt tại

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' mà tôi. e, tệp ảnh bị hỏng đôi khi vẫn là tệp ảnh hợp pháp, ảnh gốc bị mất hoặc bị thay đổi nhưng bạn vẫn có thể tải tệp đó mà không gặp lỗi. Nhưng, nguyên nhân cắt ngắn tập tin luôn luôn lỗi

Kết thúc cập nhật

Bạn có thể sử dụng mô-đun Gối Python[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 hay không

Trong trường hợp bạn muốn phát hiện cả những 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[]
4, nhưng phương pháp này không phát hiện được tất cả các lỗi hình ảnh có thể xảy ra, ví dụ:. g. ,
im = wand.image.Image[filename=filename]
temp = im.flip;
im.close[]
5 không phát hiện hình ảnh bị cắt bớt [mà hầu hết người xem thường tải với vùng màu xám]

Gối cũng có thể phát hiện các loại lỗi này, nhưng bạn phải áp dụng thao tác xử lý hình ảnh hoặc giải mã/mã hóa lại hình ảnh 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ẽ đưa ra một ngoại lệ. Xin vui lòng xem xét rằng tôi. xác minh 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 lật là một trong những phép biến đổi rẻ hơn]. Với mã này, bạn sẽ xác minh một tập hợp hình ảnh với tốc độ khoảng 10 MB/giây với Gối tiêu chuẩn hoặc 40 MB/giây với mô-đun Gối-SIMD [hiện đại 2. CPU 5Ghz x86_64]

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

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

Tuy nhiên, từ các thử nghiệm của tôi, Wand không phát hiện ra các hình ảnh bị cắt bớt, tôi nghĩ rằng nó tải các phần bị thiếu dưới dạng vùng màu xám mà không cần nhắc

Tôi nhận thấy rằng Imagemagick có một nhận dạng lệnh bên ngoài có thể thực hiện công việc, nhưng tôi chưa tìm ra cách gọi chức năng đó theo chương trình và tôi chưa kiểm tra lộ trình này

Tôi đề nghị luôn thực hiện kiểm tra sơ bộ, kiểm tra kích thước tệp không bằng 0 [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 chuẩn của nó. Một thứ thường bị bỏ qua là imghdr cho phép bạn xác định loại hình ảnh nào được chứa trong một tệp, luồng byte hoặc đối tượng giống như đường dẫn

Điều đầu tiên bạn có thể nghĩ đến để xác minh xem một hình ảnh có trong suốt hay không là xác minh định dạng của tệp. Các định dạng tệp raster hỗ trợ độ trong suốt là GIF, PNG, BMP, TIFF và JPEG 2000, thông qua màu trong suốt hoặc kênh alpha. Nhưng, theo cùng một cách mà họ có thể minh bạch, họ cũng có thể không. Do đó phương pháp xác minh thông qua định dạng của hình ảnh không đủ để xác minh những gì bạn cần

Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách xác minh chính xác xem hình ảnh có trong suốt hay không bằng Imagick trong PHP

xác minh tính minh bạch

Để kiểm tra xem ảnh có trong suốt hay không, bạn có thể sử dụng phương pháp getImageAlphaChannel của Imagick. Phương thức này trả về một số nguyên được xác định là hằng số của không gian màu của hình ảnh [kiểm tra các hằng số không gian màu của hình ảnh để biết thêm thông tin].  

Đối với chúng tôi, điều thú vị là hằng số Không gian màu không xác định có nghĩa là hình ảnh không có độ trong suốt. Hằng số này có giá trị bằng 0 nếu hình ảnh không có độ trong suốt, vì vậy bạn có thể dễ dàng kiểm tra bằng câu lệnh if

Chủ Đề