如何检测文件是否是perl中的图像

Tha*_*ama 6 perl image detection

为了设置一些变量,如果我服务器上的给定文件是图像,我需要信息.我对该文件的位置和名称一无所知.

有没有办法检测文件是否是图像而不查看文件扩展名?

Eri*_*don 11

一种简单的方法是通过PerlMagick CPAN模块将工作委托给ImageMagick .这些IdentifyPing方法是为此目的而设计的.

use strict;
use Image::Magick;

my $im = Image::Magick->new();

my ($width, $height, $size, $format) = $im->Ping('/path/to/my/image.jpg');
Run Code Online (Sandbox Code Playgroud)

执行这个小程序后,$format变量将包含一个字符串,其中包含已识别的图像格式(在此示例中为"JPEG"),或者undef出现错误(不存在的文件,无法识别的格式等).

编辑: ...并完全回答您的问题:如果Ping返回格式字符串,假设给定文件是图像可能是安全的,并且如果它是您决定从ImageMagick的支持列表中列入白名单的子集的一部分格式(也包括非图像格式).


dax*_*xim 7

JRFerguson file在附加到该问题的评论中提到了该命令.它附带一个C库对应部分libmagic.Perl绑定称为File :: LibMagic.

use File::LibMagic qw();
my $detect = File::LibMagic->new;
$detect->checktype_filename("first_success.jpg") =~ /^image/
Run Code Online (Sandbox Code Playgroud)

对于图像类型,表达式返回true.