01-02-2010, 09:42 AM
pas encore eu le temps... p-e ce matin pour une nouvelle image
Pour le srcipt pour une carte, ça ressemble à ça (il faudra l'adapter pour ta base de donnée et pour ton image):
dsl si c'est indigeste, j'ai pas retravillé bcp le code, j'ai juste ajouté qq commentaires.
Pour le srcipt pour une carte, ça ressemble à ça (il faudra l'adapter pour ta base de donnée et pour ton image):
dsl si c'est indigeste, j'ai pas retravillé bcp le code, j'ai juste ajouté qq commentaires.
Code :
<?php
include('../../includes/auth.inc.php');
$iMicroTime=microtime_float();
/*********************************************/
/* Fonction: ImageCreateFromBMP */
/* Author: DHKold */
/* Contact: admin@dhkold.com */
/* Date: The 15th of June 2005 */
/* Version: 2.0B */
/*********************************************/
function ImageCreateFromBMP($filename) //utilisation idem ImageCreateFromPNG
{
//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['colors'] = 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['decal'] = ($BMP['width']*$BMP['bytes_per_pixel']/4);
$BMP['decal'] -= floor($BMP['width']*$BMP['bytes_per_pixel']/4);
$BMP['decal'] = 4-(4*$BMP['decal']);
if ($BMP['decal'] == 4) $BMP['decal'] = 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']);
//$res = imagecreate($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['decal'];
}
//Fermeture du fichier
fclose($f1);
return $res;
}
//ici commence mon script
$size=getimagesize('gwendalavir.bmp');
$limb=0; //ici je définis les bornes (ligne de ... à ...), ce qui permet de limiter le chargement, et le dépassement des 30 secondes fatidiques (arret forcé du script par PHP)
$limh=$size[1]; // -> chargment en plusieurs fois
$im = ImageCreateFromBMP('gwendalavir.bmp');
$im2 = imagecreatetruecolor( $size[0],$size[1] );
//a partir d'ici je défini les couleurs que je vais utiliser (j'utilise une image en 16 couleurs ici, rien n'empeche d'en utiliser plus))
$black = imagecolorallocate ($im, 0, 0, 0);
$ligthblue = imagecolorallocate ($im, 0, 255, 255);
$green = imagecolorallocate ($im, 0, 128, 0);
$ligthgreen = imagecolorallocate ($im, 0, 255, 0);
$yellow = imagecolorallocate ($im, 128, 128, 0);
$ligthyellow= imagecolorallocate ($im, 255, 255, 0);
$pink = imagecolorallocate ($im, 255, 0, 255);
$grey = imagecolorallocate ($im, 128, 128, 128);
$ligthgrey = imagecolorallocate ($im, 192, 192, 192);
$white = imagecolorallocate ($im, 255, 255, 255);
$blue = imagecolorallocate ($im, 0, 0, 255);
$black2 = imagecolorallocate ($im2, 0, 0, 0);
$ligthblue2 = imagecolorallocate ($im2, 0, 255, 255);
$green2 = imagecolorallocate ($im2, 0, 128, 0);
$ligthgreen2= imagecolorallocate ($im2, 0, 255, 0);
$yellow2 = imagecolorallocate ($im2, 128, 128, 0);
$ligthyellow2=imagecolorallocate ($im2, 255, 255, 0);
$pink2 = imagecolorallocate ($im, 255, 0, 255);
$grey2 = imagecolorallocate ($im2, 128, 128, 128);
$ligthgrey2 = imagecolorallocate ($im2, 192, 192, 192);
$white2 = imagecolorallocate ($im2, 255, 255, 255);
$blue2 = imagecolorallocate ($im2, 0, 0, 255);
for($i=$limb;$i<$limh && $i<$size[0] && (microtime_float()-$iMicroTime)<57 ;$i++){
for($j=($i%2?0:1);$j<$size[1] ;$j+=2){
$color=imagecolorat ($im, $i, $j);
switch($color){
case $green: //pour chaque type de case (chaque couleur), j'associe ça à un certain terrain
$color2=$green2;
switch(LanceDe(1,10)){ //pour éviter les grandes zones d'un même terrain, je met au hazard quelques éléments d'autres types
case 1:$colorconv=2;break;
case 2:$colorconv=2;break;
case 3:$colorconv=2;break;
case 4:$colorconv=2;break;
case 5:$colorconv=2;break;
case 6:$colorconv=5;break;
case 7:$colorconv=5;break;
case 8:$colorconv=5;break;
case 9:$colorconv=5;break;
case 10:$colorconv=3;break;
default:
$colorconv=1;
}
break;
case $ligthgreen:
$color2=$ligthgreen2;
switch(LanceDe(1,10)){
case 8:$colorconv=2;break;
case 9:$colorconv=2;break;
case 10:$colorconv=5;break;
default:
$colorconv=1;
}
break;
case $ligthyellow:
$color2=$ligthyellow2;
switch(LanceDe(1,10)){
default:
$colorconv=211;
}
break;
case $pink:
$color2=$pink2;
switch(LanceDe(1,10)){
case 10:$colorconv=80;break;
default:
$colorconv=10;
}
break;
case $grey:
$color2=$grey2;
switch(LanceDe(1,10)){
case 5:$colorconv=2;break;
case 6:$colorconv=2;break;
case 7:$colorconv=5;break;
case 8:$colorconv=3;break;
case 9:$colorconv=3;break;
case 10:$colorconv=80;break;
default:
$colorconv=1;
}
break;
case $ligthgrey:
$color2=$ligthgrey2;
switch(LanceDe(1,10)){
case 6:$colorconv=2;break;
case 7:$colorconv=3;break;
case 8:$colorconv=3;break;
case 9:$colorconv=80;break;
case 10:$colorconv=80;break;
default:
$colorconv=1;
}
break;
case $blue:
case $white:
$color2=$white2;
$colorconv=80;
break;
default:
$color2=$blue2;
$colorconv=6;
}
imagefilledrectangle($im2, $i, $j, $i, $j+2, $color2);
//ici je met ça en base de donnée
RequestDB("INSERT monde2 (x,y,type_case) VALUES ('$i','$j','$colorconv');");
}
}
if($_GET['img']==1){
echo $i.'<br />';
echo 'Fini! :-)<br />Temp total : ';
echo (microtime_float()-$iMicroTime).'<br />';
}
else{
header("Content-type: image/jpeg");
imagejpeg($im2);
}
?>
Je signale que je ne détiens pas la vérité unique et absolue, je peux me tromper. La critique peut aussi être constructive. Critiquez moi!
La quête d'Ewilan
http://easy2hack.ma-soiree.be
La quête d'Ewilan
http://easy2hack.ma-soiree.be