parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Re: вот коды

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