|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Vlad Degtyarov 2:5020/400 28 Aug 2002 16:29:42 To : All Subject : проверка картинок --------------------------------------------------------------------------------
типа всем драсти
я тут смотрю что, для проверки файла на "картинкость" ;) т.е. на то,
что файл является картинкой(чтоб там кто-нибудь не засылал нам всяких
троянов), в основном используют модуль Image::Size (или еще что-то?),
но например не всегда нужно знать размеры картинки, просто надо знать
картинка это или нет. Hо и не всегда, кстати, есть возможность
использовать Image::Size.
Вот принимая это во внимание я тут кой чего накрапал, а именно:
________________________________________________________________
sub webImage
{
my $handle = shift;
my $header = '';
my @type_map = ('^GIF8[7,9]a', # gif
"^\xFF\xD8", # jpeg
"^\x89PNG\x0d\x0a\x1a\x0a" ); # png
binmode($handle);
seek($handle, 0, 0);
read $handle, $header, 128;
seek($handle, 0, 0);
return grep($header =~ /$_/, @type_map);
}
________________________________________________________________
это функция проверяющая файл на "картинкость" ;)
(тут проверяются файлы только на gif,jpeg и png, но можно добавить
проверку и на другие файлы, например bmp,swf,xbm,xpm,tiff и т.д.)
а вот как ее можно юзать:
open(IMG,'c:\\image.gif') or die;
if( webImage(IMG) ) {
print 'Yap! Diz iz imajek ;)';
# че нить с файлом делаем
} else {
print 'Hey! Das ist not kartinka!';
}
close(IMG); # взял, попользовался - поставь на место!
теперь всем все ясно.
Hу в принципе можно нарисовать вам БОHУС дня, 'имэдж даунлоадер':
________________________________________________________________
#!perl -w
#!/usr/local/bin/perl -w
# если у вас уних, или у них у вас...
# короче на unix убрать первую строчку ;)
use CGI qw(:standard);
use CGI::Carp qw/fatalsToBrowser/;
sub webImage
{
my $handle = shift;
my $header = '';
my @type_map = ('^GIF8[7,9]a', # gif
"^\xFF\xD8", # jpeg
"^\x89PNG\x0d\x0a\x1a\x0a" ); # png
binmode($handle);
seek($handle, 0, 0);
read $handle, $header, 128;
seek($handle, 0, 0);
return grep($header =~ /$_/, @type_map);
}
print header();
print start_html("Image File Upload");
print h1("Image File Upload! Muhahaha!");
# Start a multipart form.
print start_multipart_form(),
'Enter the file to process: ',
filefield('filename','',45),
p,submit,
endform;
# Process the form if there is a file name entered
if ($file = param('filename')) {
$tmpfile=tmpFileName($file);
$mimetype = uploadInfo($file)->{'Content-Type'} || '';
open(FH,$tmpfile) or die $!;
$ii = ( webImage(FH) ? 'Yes' : 'No' );
# Тут файл кудато переписываем, например в БД
close(FH);
print hr(),
h3('Your file: '.$file),
h3('My file: '.$tmpfile),
h3('MIME Type: '.em($mimetype)),
h3('Image: '.$ii);
}
print hr(),
'for more design info read CGI.pm documentation ;)',
end_html;
________________________________________________________________
Вот.
Короче Randy J. Ray спасибо за модуль Image::Size.
Если кто-то, когда-то уже такое писал (в этой эхе), то извините - не
знал.
--
Только сядешь поработать, обязательно кто-нибудь разбудит!
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
* Origin: Talk.ru (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/6488ec3bfdf9.html, оценка из 5, голосов 10
|