Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用;文件";linux命令到Perl中的二进制缓冲区_Linux_Image_Perl_File_Raw Data - Fatal编程技术网

应用;文件";linux命令到Perl中的二进制缓冲区

应用;文件";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

从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/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系统。这就是
文件
所做的。