source: trunk/expressoMail1_2/inc/gd_functions.php @ 1036

Revision 1036, 5.8 KB checked in by amuller, 15 years ago (diff)

Ticket #559 - Atualização de segurança

Line 
1<?php
2        $GLOBALS['phpgw_info']['flags'] = array(
3                'currentapp' => 'expressoMail1_2',
4                'nonavbar'   => true,
5                'noheader'   => true
6        );
7
8        require_once $_SERVER[ 'DOCUMENT_ROOT' ] . '/header.inc.php';
9*Author:
10*    JPEXS  from http://www.hotscripts.com* ImageCreateFromBmp
11*/
12
13function imagecreatefrombmp($file)
14{
15global  $CurrentBit, $echoMode;
16
17$f=fopen($file,"r");
18$Header=fread($f,2);
19
20if($Header=="BM")
21{
22 $Size=freaddword($f);
23 $Reserved1=freadword($f);
24 $Reserved2=freadword($f);
25 $FirstByteOfImage=freaddword($f);
26
27 $SizeBITMAPINFOHEADER=freaddword($f);
28 $Width=freaddword($f);
29 $Height=freaddword($f);
30 $biPlanes=freadword($f);
31 $biBitCount=freadword($f);
32 $RLECompression=freaddword($f);
33 $WidthxHeight=freaddword($f);
34 $biXPelsPerMeter=freaddword($f);
35 $biYPelsPerMeter=freaddword($f);
36 $NumberOfPalettesUsed=freaddword($f);
37 $NumberOfImportantColors=freaddword($f);
38
39if($biBitCount<24)
40 {
41  $img=imagecreate($Width,$Height);
42  $Colors=pow(2,$biBitCount);
43  for($p=0;$p<$Colors;$p++)
44   {
45    $B=freadbyte($f);
46    $G=freadbyte($f);
47    $R=freadbyte($f);
48    $Reserved=freadbyte($f);
49    $Palette[]=imagecolorallocate($img,$R,$G,$B);
50   };
51
52
53
54
55if($RLECompression==0)
56{
57   $Zbytek=(4-ceil(($Width/(8/$biBitCount)))%4)%4;
58
59for($y=$Height-1;$y>=0;$y--)
60    {
61     $CurrentBit=0;
62     for($x=0;$x<$Width;$x++)
63      {
64         $C=freadbits($f,$biBitCount);
65       imagesetpixel($img,$x,$y,$Palette[$C]);
66      };
67    if($CurrentBit!=0) {freadbyte($f);};
68    for($g=0;$g<$Zbytek;$g++)
69     freadbyte($f);
70     };
71
72 };
73};
74
75
76if($RLECompression==1) //$BI_RLE8
77{
78$y=$Height;
79
80$pocetb=0;
81
82while(true)
83{
84$y--;
85$prefix=freadbyte($f);
86$suffix=freadbyte($f);
87$pocetb+=2;
88
89$echoit=false;
90
91if($echoit)echo "Prefix: $prefix Suffix: $suffix<BR>";
92if(($prefix==0)and($suffix==1)) break;
93if(feof($f)) break;
94
95while(!(($prefix==0)and($suffix==0)))
96{
97 if($prefix==0)
98  {
99   $pocet=$suffix;
100   $Data.=fread($f,$pocet);
101   $pocetb+=$pocet;
102   if($pocetb%2==1) {freadbyte($f); $pocetb++;};
103  };
104 if($prefix>0)
105  {
106   $pocet=$prefix;
107   for($r=0;$r<$pocet;$r++)
108    $Data.=chr($suffix);
109  };
110 $prefix=freadbyte($f);
111 $suffix=freadbyte($f);
112 $pocetb+=2;
113 if($echoit) echo "Prefix: $prefix Suffix: $suffix<BR>";
114};
115
116for($x=0;$x<strlen($Data);$x++)
117 {
118  imagesetpixel($img,$x,$y,$Palette[ord($Data[$x])]);
119 };
120$Data="";
121
122};
123
124};
125
126
127if($RLECompression==2) //$BI_RLE4
128{
129$y=$Height;
130$pocetb=0;
131
132/*while(!feof($f))
133 echo freadbyte($f)."_".freadbyte($f)."<BR>";*/
134while(true)
135{
136//break;
137$y--;
138$prefix=freadbyte($f);
139$suffix=freadbyte($f);
140$pocetb+=2;
141
142$echoit=false;
143
144if($echoit)echo "Prefix: $prefix Suffix: $suffix<BR>";
145if(($prefix==0)and($suffix==1)) break;
146if(feof($f)) break;
147
148while(!(($prefix==0)and($suffix==0)))
149{
150 if($prefix==0)
151  {
152   $pocet=$suffix;
153
154   $CurrentBit=0;
155   for($h=0;$h<$pocet;$h++)
156    $Data.=chr(freadbits($f,4));
157   if($CurrentBit!=0) freadbits($f,4);
158   $pocetb+=ceil(($pocet/2));
159   if($pocetb%2==1) {freadbyte($f); $pocetb++;};
160  };
161 if($prefix>0)
162  {
163   $pocet=$prefix;
164   $i=0;
165   for($r=0;$r<$pocet;$r++)
166    {
167    if($i%2==0)
168     {
169      $Data.=chr($suffix%16);
170     }
171     else
172     {
173      $Data.=chr(floor($suffix/16));
174     };
175    $i++;
176    };
177  };
178 $prefix=freadbyte($f);
179 $suffix=freadbyte($f);
180 $pocetb+=2;
181 if($echoit) echo "Prefix: $prefix Suffix: $suffix<BR>";
182};
183
184for($x=0;$x<strlen($Data);$x++)
185 {
186  imagesetpixel($img,$x,$y,$Palette[ord($Data[$x])]);
187 };
188$Data="";
189
190};
191
192};
193
194
195 if($biBitCount==24)
196{
197 $img=imagecreatetruecolor($Width,$Height);
198 $Zbytek=$Width%4;
199
200   for($y=$Height-1;$y>=0;$y--)
201    {
202     for($x=0;$x<$Width;$x++)
203      {
204       $B=freadbyte($f);
205       $G=freadbyte($f);
206       $R=freadbyte($f);
207       $color=imagecolorexact($img,$R,$G,$B);
208       if($color==-1) $color=imagecolorallocate($img,$R,$G,$B);
209       imagesetpixel($img,$x,$y,$color);
210      }
211    for($z=0;$z<$Zbytek;$z++)
212     freadbyte($f);
213   };
214};
215return $img;
216
217};
218
219
220fclose($f);
221
222
223};
224
225
226/*
227* Helping functions:
228*-------------------------
229*
230* freadbyte($file) - reads 1 byte from $file
231* freadword($file) - reads 2 bytes (1 word) from $file
232* freaddword($file) - reads 4 bytes (1 dword) from $file
233* freadlngint($file) - same as freaddword($file)
234* decbin8($d) - returns binary string of d zero filled to 8
235* RetBits($byte,$start,$len) - returns bits $start->$start+$len from $byte
236* freadbits($file,$count) - reads next $count bits from $file
237* RGBToHex($R,$G,$B) - convert $R, $G, $B to hex
238* int_to_dword($n) - returns 4 byte representation of $n
239* int_to_word($n) - returns 2 byte representation of $n
240*/
241
242function freadbyte($f)
243{
244 return ord(fread($f,1));
245};
246
247function freadword($f)
248{
249 $b1=freadbyte($f);
250 $b2=freadbyte($f);
251 return $b2*256+$b1;
252};
253
254
255function freadlngint($f)
256{
257return freaddword($f);
258};
259
260function freaddword($f)
261{
262 $b1=freadword($f);
263 $b2=freadword($f);
264 return $b2*65536+$b1;
265};
266
267
268
269function RetBits($byte,$start,$len)
270{
271$bin=decbin8($byte);
272$r=bindec(substr($bin,$start,$len));
273return $r;
274
275};
276
277
278
279$CurrentBit=0;
280function freadbits($f,$count)
281{
282 global $CurrentBit,$SMode;
283 $Byte=freadbyte($f);
284 $LastCBit=$CurrentBit;
285 $CurrentBit+=$count;
286 if($CurrentBit==8)
287  {
288   $CurrentBit=0;
289  }
290 else
291  {
292   fseek($f,ftell($f)-1);
293  };
294 return RetBits($Byte,$LastCBit,$count);
295};
296
297
298
299function RGBToHex($Red,$Green,$Blue)
300  {
301   $hRed=dechex($Red);if(strlen($hRed)==1) $hRed="0$hRed";
302   $hGreen=dechex($Green);if(strlen($hGreen)==1) $hGreen="0$hGreen";
303   $hBlue=dechex($Blue);if(strlen($hBlue)==1) $hBlue="0$hBlue";
304   return($hRed.$hGreen.$hBlue);
305  };
306
307        function int_to_dword($n)
308        {
309                return chr($n & 255).chr(($n >> 8) & 255).chr(($n >> 16) & 255).chr(($n >> 24) & 255);
310        }
311        function int_to_word($n)
312        {
313                return chr($n & 255).chr(($n >> 8) & 255);
314        }
315
316
317function decbin8($d)
318{
319return decbinx($d,8);
320};
321
322function decbinx($d,$n)
323{
324$bin=decbin($d);
325$sbin=strlen($bin);
326for($j=0;$j<$n-$sbin;$j++)
327 $bin="0$bin";
328return $bin;
329};
330
331function inttobyte($n)
332{
333return chr($n);
334};
335
336?>
Note: See TracBrowser for help on using the repository browser.