Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Spearance 13.11.2007 15:52
Парсер:@main[] $response:body[^file::cgi[/../cgi-bin/drawpoly.pl; $.CGI_SOURCE_PATH[${env:DOCUMENT_ROOT}] $.CGI_IMAGE_NAME[1.jpg] $.CGI_POINTS[251,451 198,552 125,481|123,346 142,273 224,311|137,159 298,99 283,218|511,102 690,107 536,211|569,304 678,253 637,374|655,450 528,541 527,406] $.CGI_STATUS[1,1,1,0,1,1] $.CGI_QUALITY(80) ] ]Перл:
#!/usr/bin/perl use strict; use Image::Magick; my $src_path = $ENV{'CGI_SOURCE_PATH'}; my $points = $ENV{'CGI_POINTS'}; my $status = $ENV{'CGI_STATUS'}; my $jpg_quality = $ENV{'CGI_QUALITY'}|| 75; my $in_img = $ENV{'CGI_IMAGE_NAME'}; $in_img =~ s/\.\.//g; $in_img =~ s/[^\d\w\_\-\.]//g; print "Content-type: image/jpeg\n\n"; die ("File $in_img not found.\n") if(!(-f "$src_path/$in_img")); my($q, $x); $q = Image::Magick->new; $x = $q->Read("$src_path/$in_img"); die ("$x\n") if $x; my ($x_size, $y_size) = $q->Get('width', 'height'); die ("Image $in_img size error.\n") if (($x_size == 0) || ($y_size == 0)); my @flatStatus = split(/,/, $status); my @flatPoly = split(/\|/,$points); for(my $i = 0; $i <= $#flatStatus; ++$i){ $q->Draw(fill => '#00000077', primitive => 'polygon', points => $flatPoly[$i]) if($flatStatus[$i] == 1); } $q->Set(quality => $jpg_quality) if ($in_img =~ /^.*\.(jp(?=[eg])e?g?|png)$/i); $q->Set(compression => 'LZW') if ($in_img =~ /^.*\.(gif)$/i); binmode STDOUT; $q->Write('jpg:-');Админы дали наводку что возможно Парсер перекодирует результат в кодировку сайта, т.е. из koi8 в win. Именно поэтому я сначала попробовал дропать заголовки ^response:clear[] не помогло, потом я пробовал передать с параметром $.charset[] результат нулевой.