begin process at 2012 05 27 21:49:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > IMAGECREATEFROMBMP ET IMAGEBMP

IMAGECREATEFROMBMP ET IMAGEBMP


 Information sur la source

Note :
Aucune note
Catégorie :Divers Niveau :Débutant Date de création :25/10/2004 Date de mise à jour :26/10/2004 00:17:19 Vu / téléchargé :6 099 / 176

Auteur : kurt67

Ecrire un message privé
Site perso
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

La fonction imagecreatefrombmp retourne un identifiant d'image représentant une image obtenue à partir d'un fichier bmp 16, 24 ou 32 bits.
La fonction imagebmp envoie l'image GD (image) au format BMP 24 bits sur la sortie standard (typiquement, le navigateur web : header("Content-type:image/bmp"); ) ou dans un fichier s'il est défini.
La fonction infosbmp retourne les infos concernant un bmp.

Source

  • function imagecreatefrombmp($dir) {
  • $bmp = "";
  • if (file_exists($dir)) {
  • $file = fopen($dir,"r");
  • while(!feof($file)) $bmp .= fgets($file,filesize($dir));
  • if (substr($bmp,0,2) == "BM") {
  • // Lecture du header
  • $header = unpack("vtype/Vlength/v2reserved/Vbegin/Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant", $bmp);
  • extract($header);
  • // Lecture de l'image
  • $im = imagecreatetruecolor($width,$height);
  • $i = 0;
  • $diff = floor(($imagesize - ($width*$height*($bits/8)))/$height);
  • for($y=$height-1;$y>=0;$y--) {
  • for($x=0;$x<$width;$x++) {
  • if ($bits == 32) {
  • $b = ord(substr($bmp,$begin+$i,1));
  • $v = ord(substr($bmp,$begin+$i+1,1));
  • $r = ord(substr($bmp,$begin+$i+2,1));
  • $i += 4;
  • } else if ($bits == 24) {
  • $b = ord(substr($bmp,$begin+$i,1));
  • $v = ord(substr($bmp,$begin+$i+1,1));
  • $r = ord(substr($bmp,$begin+$i+2,1));
  • $i += 3;
  • } else if ($bits == 16) {
  • $tot1 = decbin(ord(substr($bmp,$begin+$i,1)));
  • while(strlen($tot1)<8) $tot1 = "0".$tot1;
  • $tot2 = decbin(ord(substr($bmp,$begin+$i+1,1)));
  • while(strlen($tot2)<8) $tot2 = "0".$tot2;
  • $tot = $tot2.$tot1;
  • $r = bindec(substr($tot,1,5))*8;
  • $v = bindec(substr($tot,6,5))*8;
  • $b = bindec(substr($tot,11,5))*8;
  • $i += 2;
  • }
  • $col = imagecolorexact($im,$r,$v,$b);
  • if ($col == -1) $col = imagecolorallocate($im,$r,$v,$b);
  • imagesetpixel($im,$x,$y,$col);
  • }
  • $i += $diff;
  • }
  • // retourne l'image
  • return $im;
  • imagedestroy($im);
  • } else return false;
  • } else return false;
  • }
  • function imagebmp($im,$dir="") {
  • $pix = "";
  • for($y=imagesy($im)-1;$y>=0;$y--) {
  • for($x=0;$x<imagesx($im);$x++) {
  • $rgb = ImageColorAt($im, $x, $y);
  • $r = ($rgb >> 16) & 0xFF;
  • $g = ($rgb >> 8) & 0xFF;
  • $b = $rgb & 0xFF;
  • $pix .= pack("C3",$b,$g,$r);
  • }
  • }
  • $header = pack("Vv2VVVVvvVVVVVV",strlen($pix)+54,0,0,54,40,imagesx($im),imagesy($im),1,24,0,strlen($pix),0,0,0,0);
  • if ($dir != "") {
  • $inF = fopen($dir,"w");
  • fwrite($inF,"BM".$header.$pix);
  • fclose($inF);
  • } else echo "BM".$header.$pix;
  • }
  • function infosbmp($dir) {
  • $bmp = "";
  • if (file_exists($dir)) {
  • $file = fopen($dir,"r");
  • while(!feof($file)) $bmp .= fgets($file,filesize($dir));
  • if (substr($bmp,0,2) == "BM") return unpack("vtype/Vlength/v2reserved/Vbegin/Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant", $bmp);
  • else return "Fichier bitmap non valide";
  • } else return "Fichier non trouvé";
  • }
function imagecreatefrombmp($dir) {
	$bmp = "";
	if (file_exists($dir)) {
		$file = fopen($dir,"r");
		while(!feof($file)) $bmp .= fgets($file,filesize($dir));
		if (substr($bmp,0,2) == "BM") {
			// Lecture du header
			$header = unpack("vtype/Vlength/v2reserved/Vbegin/Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant", $bmp);
			extract($header);
			// Lecture de l'image
			$im = imagecreatetruecolor($width,$height);
			$i = 0;
			$diff = floor(($imagesize - ($width*$height*($bits/8)))/$height);
			for($y=$height-1;$y>=0;$y--) {
				for($x=0;$x<$width;$x++) {
					if ($bits == 32) {
						$b = ord(substr($bmp,$begin+$i,1));
						$v = ord(substr($bmp,$begin+$i+1,1));
						$r = ord(substr($bmp,$begin+$i+2,1));
						$i += 4;
					} else if ($bits == 24) {
						$b = ord(substr($bmp,$begin+$i,1));
						$v = ord(substr($bmp,$begin+$i+1,1));
						$r = ord(substr($bmp,$begin+$i+2,1));
						$i += 3;
					} else if ($bits == 16) {
						$tot1 = decbin(ord(substr($bmp,$begin+$i,1)));
						while(strlen($tot1)<8) $tot1 = "0".$tot1;
						$tot2 = decbin(ord(substr($bmp,$begin+$i+1,1)));
						while(strlen($tot2)<8) $tot2 = "0".$tot2;
						$tot = $tot2.$tot1;
						$r = bindec(substr($tot,1,5))*8;
						$v = bindec(substr($tot,6,5))*8;
						$b = bindec(substr($tot,11,5))*8;
						$i += 2;
					}
					$col = imagecolorexact($im,$r,$v,$b);
					if ($col == -1) $col = imagecolorallocate($im,$r,$v,$b);
					imagesetpixel($im,$x,$y,$col);
				}
				$i += $diff;
			}
			// retourne l'image
			return $im;
			imagedestroy($im);
		} else return false;
	} else return false;
}

function imagebmp($im,$dir="") {
	$pix = "";
	for($y=imagesy($im)-1;$y>=0;$y--) {
		for($x=0;$x<imagesx($im);$x++) {
			$rgb = ImageColorAt($im, $x, $y);
			$r = ($rgb >> 16) & 0xFF;
			$g = ($rgb >> 8) & 0xFF;
			$b = $rgb & 0xFF;
			$pix .= pack("C3",$b,$g,$r);
		}
	}
	$header = pack("Vv2VVVVvvVVVVVV",strlen($pix)+54,0,0,54,40,imagesx($im),imagesy($im),1,24,0,strlen($pix),0,0,0,0);
	if ($dir != "") {
		$inF = fopen($dir,"w");
		fwrite($inF,"BM".$header.$pix);
		fclose($inF);
	} else echo "BM".$header.$pix;
}

function infosbmp($dir) {
	$bmp = "";
	if (file_exists($dir)) {
		$file = fopen($dir,"r");
		while(!feof($file)) $bmp .= fgets($file,filesize($dir));
		if (substr($bmp,0,2) == "BM") return unpack("vtype/Vlength/v2reserved/Vbegin/Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant", $bmp);
		else return "Fichier bitmap non valide";
	} else return "Fichier non trouvé";
}

 Conclusion

Pour les bmp 256, 16 et 2 couleurs j'y travaille...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

26 octobre 2004 00:17:19 :
Ajout de la fonction imagebmp

 Sources du même auteur

Source avec Zip Source avec une capture DORY NAVIGATOR: EXPLORATEUR DE FICHIERS ET DE DOSSIERS
Source avec Zip MASTER'S GUESTBOOK (LIVRE D'OR)
CONTOURNER LA LIMITE DE TAILLE DES FICHIERS IMPOSÉE PAR CERT...
Source avec Zip Source avec une capture CHAT UTILISANT LA FONCTION SLEEP
Source avec Zip Source avec une capture BOUTON "PARCOURIR" PERMETTANT À L'UTILISATEUR DE SÉLECTIONNE...

 Sources de la même categorie

Source avec une capture MODULE JOOMLA 1.5 NOW LISTENING par Alcantornet
Source avec Zip Source avec une capture UPLOAD CENTER par basssem81
Source avec Zip COMPTEUR DE CLIQUE PHP AVEC JQUERY par devgoneti
Source avec Zip LIVRE D'OR SIMPLE (POUR DÉBUTANT) par devgoneti
Source avec Zip SCRIPT TRAVAUX POUR VOTRE SITE par FleuryK

Commentaires et avis

Commentaire de coucou747 le 31/10/2004 23:58:35 administrateur CS

euh.. je ne comprends pas vraiment à quoi ça sert...
tu peux expliquer ?
le format bmp est un format mort non ?

Commentaire de kurt67 le 02/11/2004 17:01:23

Oui c'est vrai que le bmp n'est pas en forme mais au début je l'avais fait pour m'entrainer, pour pouvoir faire après une fonction imagecreatefromgif mais j'ai vu que les nouvelles versions de php le supporte de nouveau. L'autre utilisation que j'ai trouvé par la suite c'est la stéganographie (j'explique pas très bien alors http://www.bugbrother.com/security.tao.ca/stego.html) mais je ne suis pas sur que je le ferais.
Moi je fais des petites fonctions en php pour le fun, alors faut bien que je trouve quelque chose a faire ;)

Commentaire de coucou747 le 02/11/2004 17:06:07 administrateur CS

euh stégano en php, je ne penses pas que ce soit une bonne idée... enfin pas avec des ouvertures fermetures de ce style d'images...

rien ne vaut le C pour ça...
Si tu veux une interface, pourquois pas mais le C c'est bien plus rapide pour les grosses images...

Stégano je conais, faut modifier le bit de poids faible d'un octet sur 24 a partir du 60 eme, c'est le plus simple...

Commentaire de coucou747 le 02/11/2004 17:06:51 administrateur CS

rectif d'un octet sur 3

Commentaire de kurt67 le 02/11/2004 17:19:51

Ouaip en fait c'est pas une bonne idée et de toute façon en C mon grand frère en a déjà fait un et il y en a déjà plein.
Bon donc j'aurais fait une source inutile de plus (et il y en a déjà tellement, faudrait classer les sources en trois rubrique : utile, peut servir, et poubelle).

Commentaire de OrochimaruSama le 21/11/2008 07:55:01

OMG super merci bocou c exactement ce k'il me fallait. Merci bocoup kurt67 !!

Comme quoi meme en 2008 yen a ki utilisent tjs du BMP (notamment pour Artichow -> Spreadsheet_excel)

;)

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales