| Новости | 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[] результат нулевой.