2011-01-24 38 views
12

Tôi có> 2000 hình ảnh từ luồng webcam (cho video tua nhanh thời gian), tôi cần xóa tất cả hình ảnh bị lỗi & chưa hoàn chỉnh trước khi chuyển chúng sang tập lệnh php-gd để chỉnh sửa chúng video cuối cùng.Phát hiện hình ảnh bị hỏng trong tập lệnh bash

Có thể phát hiện tệp bị hỏng bằng imagemagick hoặc một số công cụ khác không? Nếu tôi cố gắng mở hình ảnh bị hỏng với feh, nó sẽ hiển thị libpng error: Read Error trong bảng điều khiển

Cảm ơn bạn trước!

CẬP NHẬT: Dường như phương pháp xác định được đề xuất chấp nhận hình ảnh xấu trong trường hợp của tôi. Dưới đây là ví dụ về người bị hỏng http://imgur.com/YcB9n

+0

Cùng một vấn đề với 'identify' đây. Nó chấp nhận hình ảnh * là * trong thực tế không đầy đủ. –

+0

Việc đóng này là "quá rộng" nói về sự hẹp hòi của cử tri? Có vẻ như một câu hỏi hoàn toàn phù hợp với tôi. – mitchus

+0

Theo mặc định, "xác định" chỉ nhìn vào tiêu đề hình ảnh và do đó sẽ không phát hiện tham nhũng trong dữ liệu hình ảnh. Sử dụng "xác định -verbose" để quét toàn bộ tệp hình ảnh. –

Trả lời

13

Hãy thử dùng lệnh identify của ImageMagick. Từ trang người đàn ông:

Xác định mô tả định dạng và đặc điểm của một hoặc nhiều hình ảnh tập tin. Nó cũng sẽ báo cáo nếu một hình ảnh không đầy đủ hoặc bị hỏng.

Ví dụ:

$ identify foo.png 
identify: NotAPNGImageFile (foo.png). 

$ echo $? 
1 

Một thay thế, là sử dụng PIL (Thư viện Python Imaging):

from PIL import Image 

im = Image.open("foo.png") 
im.verify() 

Từ documentation:

im.verify()

Cố gắng xác định xem tệp có bị bị hỏng mà không thực sự giải mã dữ liệu hình ảnh . Nếu phương pháp này tìm thấy bất kỳ vấn đề nào , nó sẽ nêu ra các ngoại lệ phù hợp. Phương pháp này chỉ hoạt động trên hình ảnh mới mở; nếu hình ảnh có đã được tải, kết quả là không xác định. Ngoài ra, nếu bạn cần tải hình ảnh sau khi sử dụng phương pháp này, bạn phải mở lại tệp hình ảnh.

+1

Yêu dòng lệnh 'ident'. Cảm ơn bạn rất nhiều! Bạn đã lưu mông của tôi! – Atcold

+1

Tôi có thể xác nhận rằng, theo báo cáo của OP, 'xác định' cũng thường chấp nhận hình ảnh được quyết định không đầy đủ. –

+0

sử dụng cờ -verbose để xuất các lỗi và cảnh báo – Orhan

4

Tôi đã thử các lệnh ImageMagick identify trên jpg tôi đã đặt xung quanh với nhiều loại tham nhũng ném vào. Đó là khả năng nhận biết một số người, nhưng không phải tất cả, vì vậy đây chỉ có thể là một giải pháp phần tốt nhất, nhưng thử này:

for f in *.JPG ; do identify $f > /dev/null || echo $f >> /tmp/fail ; done ; cat /tmp/fail 
3

Cung cấp

identify -ping IMAGE_NAME 

có phi zero-mã trả lại cho hình ảnh bị hỏng, bạn có thể làm điều này:

RESULTS_FILE=/tmp/failed_images 
find . -name \*.png -exec identify -ping {} \; -or -exec echo {} \; > $RESULTS_FILE 

Điều này sẽ đưa danh sách hình ảnh không thành công đến $RESULTS_FILE.Kiểm tra nó, ví dụ, so sánh số lượng kết quả trong file với số lượng hình ảnh:

find . -name \*.png | wc -l 
wc -l $RESULTS_FILE 

Khi/nếu bạn đang hạnh phúc, xóa hình ảnh bằng cách chạy

cat $RESULTS_FILE | xargs rm -f 
+0

Đối với những người bạn trong tương lai, điều này đã xóa tất cả hình ảnh trong một thư mục cho tôi trên Ubuntu 16.04. Có khả năng cần cập nhật. – crockpotveggies

+0

@crockpotveggies Rất tiếc khi nghe điều đó, tôi đã thay đổi các lệnh thành một phiên bản an toàn hơn. Phiên bản gốc của tôi đã có một cảnh báo về rm -f ở cuối, nhưng tôi nên biết rằng nó không đủ. –

Các vấn đề liên quan