Copy codeThe Code is as follows:
<? Php
// Example:
$ Path = ROOT. 'upload/2009/06/03/124401282315771 .';
$ PathAll = $ path. 'bmp ';
$ Mi = '';
$ Mi = ImageCreateFromBMP ($ pathAll );
Imagejpeg ($ mi, $ path. 'jpg ');
// The function is as follows:
Function ImageCreateFromBMP ($ filename)
{
// Ouverture du fichier en mode binaire
If (! $ F1 = fopen ($ filename, "rb") return FALSE;
// 1: Chargement des ent �tes FICHIER
$ FILE = unpack ("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread ($ f1, 14 ));
If ($ FILE ['file_type ']! = 19778) return FALSE;
// 2: Chargement des ent �tes BMP
$ BMP = unpack ('vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel '.
'/Vcompression/Vsize_bitmap/Vhoriz_resolution '.
'/Vvert_resolution/Vcolors_used/Vcolors_important', fread ($ f1, 40 ));
$ BMP ['color'] = pow (2, $ BMP ['bits_per_pixel ']);
If ($ BMP ['size_bitmap'] = 0) $ BMP ['size_bitmap'] = $ FILE ['file_size ']-$ FILE ['bitmap_offset'];
$ BMP ['bytes_per_pixel '] = $ BMP ['bits_per_pixel']/8;
$ BMP ['bytes_per_pixel2 '] = ceil ($ BMP ['bytes_per_pixel']);
$ BMP ['desc'] = ($ BMP ['width'] * $ BMP ['bytes_per_pixel ']/4 );
$ BMP ['desc']-= floor ($ BMP ['width'] * $ BMP ['bytes_per_pixel ']/4 );
$ BMP ['Demo'] = 4-(4 * $ BMP ['Demo']);
If ($ BMP ['Demo'] = 4) $ BMP ['Demo'] = 0;
// 3: Chargement des couleurs de la palette
$ PALETTE = array ();
If ($ BMP ['colors '] <16777216)
{
$ PALETTE = unpack ('V'. $ BMP ['colors '], fread ($ f1, $ BMP ['colors'] * 4 ));
}
// 4: Cr �ation de l' image
$ IMG = fread ($ f1, $ BMP ['size_bitmap']);
$ VIDE = chr (0 );
$ Res = imagecreatetruecolor ($ BMP ['width'], $ BMP ['height']);
$ P = 0;
$ Y = $ BMP ['height']-1;
While ($ Y> = 0)
{
$ X = 0;
While ($ X <$ BMP ['width'])
{
If ($ BMP ['bits_per_pixel '] = 24)
$ COLOR = unpack ("V", substr ($ IMG, $ P, 3). $ VIDE );
Elseif ($ BMP ['bits_per_pixel '] = 16)
{
$ COLOR = unpack ("n", substr ($ IMG, $ P, 2 ));
$ COLOR [1] = $ PALETTE [$ COLOR [1] + 1];
}
Elseif ($ BMP ['bits_per_pixel '] = 8)
{
$ COLOR = unpack ("n", $ VIDE. substr ($ IMG, $ P, 1 ));
$ COLOR [1] = $ PALETTE [$ COLOR [1] + 1];
}
Elseif ($ BMP ['bits_per_pixel '] = 4)
{
$ COLOR = unpack ("n", $ VIDE. substr ($ IMG, floor ($ P), 1 ));
If ($ P * 2) % 2 = 0) $ COLOR [1] = ($ COLOR [1]> 4 ); else $ COLOR [1] = ($ COLOR [1] & 0x0F );
$ COLOR [1] = $ PALETTE [$ COLOR [1] + 1];
}
Elseif ($ BMP ['bits_per_pixel '] = 1)
{
$ COLOR = unpack ("n", $ VIDE. substr ($ IMG, floor ($ P), 1 ));
If ($ P * 8) % 8 = 0) $ COLOR [1] = $ COLOR [1]> 7;
Elseif ($ P * 8) % 8 = 1) $ COLOR [1] = ($ COLOR [1] & 0x40)> 6;
Elseif ($ P * 8) % 8 = 2) $ COLOR [1] = ($ COLOR [1] & 0x20)> 5;
Elseif ($ P * 8) % 8 = 3) $ COLOR [1] = ($ COLOR [1] & 0x10)> 4;
Elseif ($ P * 8) % 8 = 4) $ COLOR [1] = ($ COLOR [1] & 0x8)> 3;
Elseif ($ P * 8) % 8 = 5) $ COLOR [1] = ($ COLOR [1] & 0x4)> 2;
Elseif ($ P * 8) % 8 = 6) $ COLOR [1] = ($ COLOR [1] & 0x2)> 1;
Elseif ($ P * 8) % 8 = 7) $ COLOR [1] = ($ COLOR [1] & 0x1 );
$ COLOR [1] = $ PALETTE [$ COLOR [1] + 1];
}
Else
Return FALSE;
Imagesetpixel ($ res, $ X, $ Y, $ COLOR [1]);
$ X ++;
$ P + = $ BMP ['bytes_per_pixel '];
}
$ Y --;
$ P + = $ BMP ['Demo'];
}
// Fermeture du fichier
Fclose ($ f1 );
Return $ res;
}
?>