내 서버의 파일이 이미지 인 경우 일부 정보를 설정하려면 정보가 필요합니다. 그 파일의 위치와 이름을 제외한 파일에 대해서는 아무 것도 모른다.파일이 perl의 이미지인지 확인하는 방법
파일이 파일 확장명을 보지 않고 이미지인지 여부를 감지하는 방법이 있습니까?
내 서버의 파일이 이미지 인 경우 일부 정보를 설정하려면 정보가 필요합니다. 그 파일의 위치와 이름을 제외한 파일에 대해서는 아무 것도 모른다.파일이 perl의 이미지인지 확인하는 방법
파일이 파일 확장명을 보지 않고 이미지인지 여부를 감지하는 방법이 있습니까?
쉽게 할 수있는 방법은 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
는 형식 문자열을 반환하는 경우 해당 파일이 이미지가 있다고 가정 아마도 안전, 그리고 당신이 백색 결정의 서브 세트 중의 일부인 경우 - 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 – Thariama
같은 제 @JRFerguson 언급 명령 file
는 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.";
}
아이디어는 알려진 이미지 형식에 대한 정규 표현식입니다.
내가 한 방법 중 하나입니다. perl 모듈 양식 CPAN "Image-Size-3.300> Image :: Size"를 사용하십시오. 그것은 또한 파일 속성 image "type"을가집니다. 그런 다음이 변수를 사용하여 정보를 사용하여 응용 프로그램의 코드를 처리 할 수 있습니다.
#!/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);
일부 형식의 이미지 (.jpg, .png, .gif)는 감지 할 수 있지만 모든 기존 형식은 감지하지 못한다고 가정합니다.) 충분하겠습니까? – raina77ow
제 질문은 파일 확장자를 보지 않고 해결책을 찾고있었습니다 – Thariama
파일 형식이 아닌 파일 확장명에 대해 어떻게 생각하니? – raina77ow