回答
一个简单的方法是通过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