2012-12-07 45 views
15

thể trùng lặp:
Know if a file is a image in Java/AndroidAndroid: Cách kiểm tra xem tệp có phải là hình ảnh không?

Làm thế nào tôi có thể kiểm tra một tập tin nếu nó là một hình ảnh? như sau:

if (file.isImage) ....

Nếu đó là không thể thực hiện với các thư viện chuẩn, làm thế nào tôi có thể làm điều đó với các lib MagickImage?

Cảm ơn trước!

+2

có thể bạn có thể kiểm tra với phần mở rộng tập tin .. –

+1

có thể lặp lại http://stackoverflow.com/q/9244710/681807 –

+0

Tôi nghĩ rằng nó không phải đúng cách để kiểm tra với phần mở rộng tập tin. Bởi vì tôi sẽ phải tạo ra một chức năng kiểm tra MỌI phần mở rộng tập tin hình ảnh như bmp, jpg, jpeg, png, gif, tif, vv ... –

Trả lời

16

Hãy thử mã này Thân mến.

public class ImageFileFilter implements FileFilter 
    { 
     File file; 
     private final String[] okFileExtensions = new String[] {"jpg", "png", "gif","jpeg"}; 

     /** 
     * 
     */ 
     public ImageFileFilter(File newfile) 
     { 
      this.file=newfile; 
     } 

     public boolean accept(File file) 
     { 
      for (String extension : okFileExtensions) 
       { 
        if (file.getName().toLowerCase().endsWith(extension)) 
        {    
        return true; 
        } 
       } 
      return false;   
     } 

    } 

Nó hoạt động tốt.

và sử dụng tính năng này như (new ImageFileFilter (tên tệp vượt qua));

+4

Điều đó làm việc ... Bây giờ tôi phải tìm kiếm mọi phần mở rộng hình ảnh ... –

+0

Hầu hết chào mừng cưng. –

+9

@ZalaJanaksinh Điều này sẽ trả về 'true' cho bất kỳ tệp nào có phần mở rộng" tệp hình ảnh ", ví dụ: nếu tôi đổi tên 'test.mp3' thành' test.jpg', phương thức của bạn sẽ trả về 'true'. – Baz

40

Tôi nghĩ nếu bạn muốn kiểm tra xem tệp có phải là hình ảnh hay không, bạn cần đọc nó. Tệp hình ảnh có thể không tuân theo quy tắc của tiện ích tệp. Bạn có thể thử để phân tích các tập tin bằng cách BitmapFactory như sau:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 
Bitmap bitmap = BitmapFactory.decodeFile(path, options); 
if (options.outWidth != -1 && options.outHeight != -1) { 
    // This is an image file. 
} 
else { 
    // This is not an image file. 
} 
+1

Nhưng bạn sẽ cần 'try'' catch' phải không? .. – Doomsknight

+0

Bạn chỉ có thể kiểm tra giá trị trả về của BitmapFactory.decodeFile (đường dẫn, tùy chọn); – zsxwing

+3

options.inJustDecodeBounds = true giảm chi phí phân tích thời gian kể từ decodeFile sẽ phân tích chỉ chiều rộng và chiều cao của hình ảnh. – zsxwing

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