7

いくつかの変数を設定するには、サーバー上の特定のファイルが画像である場合の情報が必要です。場所と名前を除いて、ファイルについては何も知りません。

ファイル拡張子を見ずにファイルが画像であるかどうかを検出する方法はありますか?

4

5 に答える 5

11

これを行う簡単な方法は、PerlMagick CPAN モジュールを介して作業を 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フォーマット文字列を返す場合、特定のファイルが画像であると想定するのはおそらく安全です。フォーマット(画像以外のフォーマットも含む)。

于 2012-06-18T12:53:55.213 に答える
7

JRFerguson はfile、質問に添付されたコメントでコマンドについて言及しています。これには、C ライブラリのカウンターパートであるlibmagic. Perl バインディングはFile::LibMagicと呼ばれます。

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

画像タイプの場合、式は true を返します。

于 2012-06-18T13:34:21.770 に答える
3

コマンド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.";
}

アイデアは、既知の画像形式に対して正規表現することです。

于 2013-12-06T20:42:55.283 に答える
1

あなたはすでに2つの良い答えを得ました。このような場合に役立つツールがもう1つあります。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;
于 2012-06-19T19:34:37.633 に答える
1

これが私がやった方法の1つです。perl モジュールフォーム CPAN "Image-Size-3.300 > Image::Size" を使用します。ファイル属性の画像「タイプ」もあります。次に、これらの変数を取得し、その情報を使用してアプリケーションのコードを処理できます。

#!/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);
于 2017-01-08T04:44:21.220 に答える