Wat je ook kan doen is de flashbanner in een containermovie laden, die dezelfde framerate en backgroundcolor van de banner zelf heeft.
In een hoger level laadt je dan een movie met een onzichtbare knop die linkt naar de gewenste url.
Ik heb ooit eens een systeempje gebouwd waarmee dit proces werd geautomatiseerd.
Hiervoor moet je dan eerst de framerate en backgroundcolor uit de flashbanner peuteren, zodat je die kunt meegeven aan de containermovie
Uitlezen van deze gegevens doe je zo in perl:
Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| use Compress::Zlib;
# banner inlezen
my $gz = gzopen("$in{filename}", "rb") or die &error("Cannot open $file: $gzerrno\n");
$swf .= $buffer while $gz->gzread($buffer) > 0;
$gz->gzclose();
if (substr($swf, 0, 3) eq "CWS") { # banner in gecomprimeerd formaat
$output = uncompress(substr($swf,8));
} else {
$output = substr($swf,8);
}
# offset in swf file header bepalen
# blijkbaar verschilt de positie van background en framerate per file..
$offset = 0;
if (ord(substr($output, 9, 1)) ne "0") {
$offset = -1;
}
$frame_rate = ord(substr($output, 10 + $offset, 1));
$background_color = &DoHex(substr($output, 15 + $offset, 1)) . &DoHex(substr($output, 16 + $offset, 1)) . &DoHex(substr($output, 17 + $offset, 1));
sub DoHex { # kan netter en korter, maar gaat ff om het idee..
my $Hexval = sprintf("%x", ord($_[0]));
if (length($Hexval < 2)) {
foreach(length($Hexval)..1) {
$Hexval = "0" . $Hexval;
}
}
return($Hexval);
} # end DoHex |
Op basis van deze gegevens kun je de html code voor de banner genereren, bijv:
Perl:
1
2
3
4
| <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width=468 height=60>
<param name=movie VALUE="flashbanner.cgi?b_url=$in{filename}&l_url=$in{l_url}&f=$frame_rate">
<param name=quality VALUE=high> <param name=bgcolor VALUE=#$background_color>
</object> |
In flashbanner.cgi lees je dan de containermovie in, en vervang je de framerate door de juiste waarde:
Perl:
1
2
3
4
5
6
7
8
9
10
| open SWF, "container.swf";
binmode SWF;
$container = <SWF>;
close SWF;
$container = substr($container,0,18) . chr($in{f}) . substr($container,18);
print "Content-Type: application/x-shockwave-flash\n\n";
print $container;
exit; |
variabelen b_url en l_url gebruik je in de containermovie om de juiste banner in te laden, en naar het juiste url door te linken
PS: bovenstaande code is onvolledig. maar denk dat het idee zo wel duidelijk is..
[
Voor 8% gewijzigd door
bRight op 17-07-2005 14:25
]