应用;文件";linux命令到Perl中的二进制缓冲区
从Web检索图像后,缓冲区中有图像:应用;文件";linux命令到Perl中的二进制缓冲区,linux,image,perl,file,raw-data,Linux,Image,Perl,File,Raw Data,从Web检索图像后,缓冲区中有图像: my $img = $webapi->get('http://myserver.com/image/123423.jpg'); 调用后,原始数据位于$img中。我想确保数据代表的是图像而不是文本,所以我将其保存到磁盘上的一个文件中,然后运行file命令: open my $fh, '>', '/tmp/images/rawdata.bin'; print $fh $img; close $fh; $res = `file /tmp/images
my $img = $webapi->get('http://myserver.com/image/123423.jpg');
调用后,原始数据位于$img中。我想确保数据代表的是图像而不是文本,所以我将其保存到磁盘上的一个文件中,然后运行file命令:
open my $fh, '>', '/tmp/images/rawdata.bin';
print $fh $img;
close $fh;
$res = `file /tmp/images/rawdata.bin`;
if ($res =~ 'GIF|JPEG|PNG') print "Image";
else "Not image";
如何避免将原始数据保存到文件中,并在内存中执行工作?
文件
可以从标准数据中读取数据。因此,最简单的方法可能是:
open ( my $file_cmd, '|-', 'file -' ) or die $!;
print {$file_cmd} $img;
print <$file_cmd>;
open(我的$file_cmd,“|-”,“file-”)或die$!;
打印{$file_cmd}$img;
印刷品;
似乎有一个模块-File::Type
可以执行此操作。我的快速测试意味着它没有文件
那么聪明,这会让它变得不那么有用 这里有另一种方法:Jpeg以\xFF\xD8开头,GIF以“GIF89a”或“GIF87a”开头,PNG以这些小数开头:137 80 78 71 13 10 26 10。不确定,但似乎也适合MIME类型,其中文件
不适用。您指的是管道符号的方向吗?因为我很确定这是正确的方法。(以-|
的形式打开意味着我无法打印它)。您还可以使用/usr/share/misc/magic
您可以参考on*nix系统。这就是文件
所做的。