回答
一個簡單的方法是通過PerlMagickCPAN模塊將工作委託給ImageMagick。 Identify
和Ping
方法是爲此目的而設計的。
use strict;
use Image::Magick;
my $im = Image::Magick->new();
my ($width, $height, $size, $format) = $im->Ping('/path/to/my/image.jpg');
執行這個小程序之後,$format
變量將包含與所述圖像的所識別的格式的字符串(在本例中:「JPEG」)在出錯的情況下,或undef
(非現有的文件,無法識別的格式等)。
編輯: ...並完全回答你的問題:它可能是安全的假設,一個給定的文件是一個形象,如果Ping
返回一個格式字符串,如果它的一部分,取其子集你決定白色 - 來自ImageMagick的list of supported formats(其中還包括非圖像格式)。
+1正在解決我的問題 - 非常感謝 – Thariama
JRFerguson在附帶問題的評論中提到了命令file
。它帶有一個C庫對手部分,libmagic
。 Perl綁定被稱爲File::LibMagic。
use File::LibMagic qw();
my $detect = File::LibMagic->new;
$detect->checktype_filename("first_success.jpg") =~ /^image/
表達式對圖像類型返回true。
+1感謝這個其他方法 – Thariama
+1爲啓發我! – JRFerguson
我使用的另一個可比較的模塊是['File :: MimeInfo :: Magic'](https://metacpan.org/module/File::MimeInfo::Magic) –
你已經有了兩個很好的答案。在這些情況下還有另外一種工具可以有價值。這將比libmagic解決方案慢,但它有時更適用於附加信息和實用程序。我不知道哪個工具更全面或者可能會在邊緣案例中失敗。 Image::ExifTool –
use Image::ExifTool "ImageInfo";
my $info = ImageInfo(shift || die "Give an image file!\n");
print "This is a ", $info->{FileType}, "\n";
use Data::Dump "pp";
print "Here's more...\n";
pp $info;
+1 thx這個額外的工作方法 – Thariama
命令file
,首先由@JRFerguson提到的,具有相對於File::LibMagic
,Image::Magick
,或Image::ExifTool
限制。
但是,當您無法安裝或使用這些模塊時,file
非常棒。至於示例代碼,你可以去這樣的事情:
my $file = "/dir/images/image.jpg";
my $type = `file $file`;
unless ($type =~ /JPEG/i
|| $type =~ /PNG/i) {
print "The file is not a valid JPEG or PNG.";
}
這個想法是隻針對已知圖像格式的正則表達式。
這是我做到這一點的方法之一。使用CPAN「Image-Size-3.300> Image :: Size」的perl模塊。它也有文件屬性圖像「類型」。然後,您可以使用這些變量並使用這些信息來處理應用程序的代碼。
#!/usr/bin/perl
use Image::Size;
print "Content-type: text/html\n\n";
my ($image_width, $image_height, $image_type) = imgsize("path/image.jpg");
unless ($image_type =~ /JPG/i
|| $image_type =~ /PNG/i) {
print "The file is not a valid JPG or PNG.";
}
#To see the results printed to the web browser
print "<br>(image.jpg) $image_width - $image_height - $image_type<br>\n";
exit(0);
- 1. 如何檢測href是否是圖像?
- 2. 檢測上傳的文件是否是PHP中的圖像
- 3. 檢測文件是否是Python中的圖像
- 4. 如何檢測文件是否是PHP中的圖標?
- 5. 如何檢查文件是否是C++中的圖像類型?
- 6. 如何檢查文件是否是perl中的命名管道?
- 7. 檢測ColdFusion中圖像是否模糊
- 8. 圖像中檢測是否在Javascript
- 9. 檢測圖像中是否存在球
- 10. 如何檢測圖像是否是方形的?
- 11. 檢查文件是否是任何圖像(一般檢查) - PHP
- 12. 是否有可能檢測到重複的圖像文件?
- 13. 如何檢測圖像是否與jQuery是png?
- 14. 如何檢測位圖中的像素是否爲黑色
- 15. 如何檢測鼠標是否在picturebox中的圖像?
- 16. 檢查文件是否爲圖像
- 17. 檢查文件是否爲圖像
- 18. 如何檢測文件是否不是c中的文本文件#
- 19. 如何檢查上傳的文件是否是Django中的有效圖像
- 20. 如何檢查類文件或jar文件是否被檢測?
- 21. 檢測圖像控件是否已完成更新其圖像
- 22. 如何檢測Perl中是否存在(=)當前行的符號?
- 23. 如何檢測stdout是否連接到Perl中的tty?
- 24. 在Perl中,如何測試字符串是否是迴文?
- 25. 如何檢測文件夾中是否添加了文件?
- 26. 如何檢測項目文件夾中是否存在文件?
- 27. 如何檢測圖像文件是否存在於我的情況?
- 28. Perl檢查文件是否打開
- 29. 檢查文件是否存在(Perl)
- 30. 檢測圖像是否有水印?
我想你可以檢測一些格式的圖像(.jpg,.png,.gif),但不是所有的現有格式。 )它會足夠嗎? – raina77ow
我的問題是不考慮文件擴展名而找出解決方案 – Thariama
是什麼讓你覺得我談論的是文件擴展名,而不是文件格式? – raina77ow