AWS-Lambda
view release on metacpan or search on metacpan
examples/cgi/WwwCounter/gifcat.pl view on Meta::CPAN
package gifcat;
$pflag = 0; # print flag
;# =====================================================
;# gifcat'gifprint() - print out GIF diagnostics.
;# =====================================================
sub gifprint {
$pflag = 1;
&gifcat(@_);
$pflag = 0;
}
;# =====================================================
;# gifcat'gifcat() - get a concatenated GIF image.
;# =====================================================
sub gifcat {
@files = @_;
$Gif = 0;
$leftpos = 0;
$logicalScreenWidth = 0;
$logicalScreenHeight = 0;
$useLocalColorTable = 0;
foreach $file (@files) {
$size = -s $file;
open(IN, "$file") || return("ERROR");
binmode(IN);
read(IN, $buf, $size) || return("ERROR");
close(IN);
$cnt = 0;
&GifHeader();
while (1) {
$x1 = ord(substr($buf, $cnt, 1));
if ($x1 == 0x2c) {
&ImageBlock();
} elsif ($x1 == 0x21) {
$x2 = ord(substr($buf, $cnt + 1, 1));
if ($x2 == 0xf9) {
&GraphicControlExtension();
} elsif ($x2 == 0xfe) {
&CommentExtension();
} elsif ($x2 == 0x01) {
&PlainTextExtension();
} elsif ($x2 == 0xff) {
&ApplicationExtension();
} else {
return("ERROR");
}
} elsif ($x1 == 0x3b) {
&Trailer();
last;
} elsif ($cnt == $size) {
last;
} else {
return("ERROR");
}
}
undef($buf);
$Gif++;
}
if ($pflag == 1) {
return;
}
$GifImage = "GIF89a";
$GifImage .= pack("C", $logicalScreenWidth & 0x00ff);
$GifImage .= pack("C", ($logicalScreenWidth & 0xff00) >> 8);
$GifImage .= pack("C", $logicalScreenHeight & 0x00ff);
$GifImage .= pack("C", ($logicalScreenHeight & 0xff00) >> 8);
if ($useLocalColorTable) {
$PackedFields18[0] &= ~0x80;
}
$GifImage .= pack("C", $PackedFields18[0]);
$GifImage .= pack("C", $BackgroundColorIndex);
$GifImage .= pack("C", $PixelAspectRatio);
if ($useLocalColorTable == 0) {
$GifImage .= $globalColorTable[0];
}
for ($i = -1; $i < $Gif; $i++) {
$j = ($i == -1) ? 0 : $i;
$GifImage .= pack("CCC", 0x21, 0xf9, 0x04);
$GifImage .= pack("C", $PackedFields23 | $TransparentColorFlag[$j]);
$GifImage .= pack("CC", 0x00, 0x00);
$GifImage .= pack("C", $TransparentColorIndex[$j]);
$GifImage .= pack("C", 0x00);
$GifImage .= pack("C", 0x2c);
$n = $leftpos;
$leftpos += ($i == -1) ? 0 : $ImageWidth[$j];
$GifImage .= pack("C", $n & 0x00ff);
$GifImage .= pack("C", ($n & 0xff00) >> 8);
$GifImage .= pack("CC", 0x00, 0x00);
$GifImage .= pack("C", $ImageWidth[$j] & 0x00ff);
$GifImage .= pack("C", ($ImageWidth[$j] & 0xff00) >> 8);
$GifImage .= pack("C", $ImageHeight & 0x00ff);
$GifImage .= pack("C", ($ImageHeight & 0xff00) >> 8);
if ($useLocalColorTable) {
$PackedFields20[$j] |= 0x80;
$PackedFields20[$j] &= ~0x07;
$PackedFields20[$j] |= ($PackedFields18[$j] & 0x07);
$GifImage .= pack("C", $PackedFields20[$j]);
$GifImage .= $globalColorTable[$j];
} else {
$GifImage .= pack("C", $PackedFields20[$j]);
}
$GifImage .= pack("C", $LzwMinimumCodeSize[$j]);
$GifImage .= $ImageData[$j];
}
$GifImage .= pack("C", 0x3b);
}
;# =====================================
;# GifHeader
;# =====================================
sub GifHeader {
$Signature = substr($buf, $cnt, 3); $cnt += 3;
$Version = substr($buf, $cnt, 3); $cnt += 3;
$LogicalScreenWidth
( run in 1.884 second using v1.01-cache-2.11-cpan-d80b1682f3f )