Page 1 sur 1

Demande d'explication de code

Posté : 27 mai 2008, 18:58
par fabrice88250
Bonjour,
j'ai un code php qui permet d'afficher une image prise en flash par webcam.
est ce que quelqu'un pourrait m'expliquer le code php svp car l'affichage de l'image fonctionne bien mais j'aimerai recuperer la photos et l'enregister dans un repertoire de mon ftp afin de faire par la suite un genre de mini galerie.

<?php

function hex2in_digit($num) {
	if (($num >= '0') && ($num <= '9'))
		return $num;
	return ord(strtolower($num)) - ord('a') + 10;
}

function hex2int($num) {
	if (strlen($num) == 1) $num = "0" . $num;
	return hex2in_digit($num[0])*16 + hex2in_digit($num[1]);
}

function normColor($c) {
	$c = floor($c);
	if ($c < 0) return 0;
	if ($c > 255) return 255;
	return $c;
}

$yv = explode(",",$_POST['yv']);
$cb = explode(",",$_POST['cb']);
$cr = explode(",",$_POST['cr']);

$sortie = imagecreatetruecolor(260,220);

$k=0;
for($i=0;$i<120;$i++) {
	for($j=0;$j<160;$j++){
		$y_value = hex2int($yv[$k]);
		//tab[i][j]=tab[i*n+j] with n the width
		$index = floor($i/4) * 40 + floor($j/4); //40=160/4
		$cb_value = hex2int($cb[$index]);
		$cr_value = hex2int($cr[$index]);

		$r = normColor(1 * $y_value + 0.0000 * $cb_value + 1.4022 * $cr_value + (1.4022 * -127.5));
		$g = normColor(1 * $y_value + -0.3456 * $cb_value + -0.7145 * $cr_value + (-0.3456 * -127.5) + (-0.7145 * -127.5));
		$b = normColor(1 * $y_value + 1.7710 * $cb_value + 0.0000 * $cr_value + (1.7710* -127.5));

		$pix = imagecolorallocate($sortie, $r, $g, $b);

		imagesetpixel($sortie,$j,$i,$pix);
		$k++;
	}
}
header("Content-type: image/jpeg");
imagejpeg($sortie,"",100);
imagedestroy($sortie);

?>

merci 

Posté : 27 mai 2008, 19:06
par jojolapine
bonsoir,
alors je ne peut pas t'expliquer tout le code (je comprend pas tout... ;)
mais je sais que pour enregistrer tes images, il faut modifier ces lignes:
header("Content-type: image/jpeg");
imagejpeg($sortie,"",100);
imagedestroy($sortie); 
en
header("Content-type: image/jpeg");
imagejpeg($sortie,"unchemin/unfichier.jpg",100);
imagedestroy($sortie); 
où unchemin/unfichier.jpg est le nom de fichier que tu enregistres.

Posté : 27 mai 2008, 19:18
par fabrice88250
ok j'ai essayé de mettre un chemin mais mon image n'apparait plus. (j'ai une croix rouge a la place)
par contre mon image unfichier.jpg s'enregistre bien dans mon repertoire.

comment faire pour que le nom de l'image change automatiquement ? du genre faire une incremantation pour que les photos ne portent pas le meme nom.

Posté : 27 mai 2008, 20:55
par jojolapine
essaye quelque chose genre:
imagejpeg($sortie,"unchemin/unfichier.jpg",100);
imagedestroy($sortie);
header("Location: unchemin/unfichier.jpg");
dis moi si les deux sorties fonctionnent?

Posté : 27 mai 2008, 21:08
par fabrice88250
Oui dans ce sens sa fonctionne merci. J’ai bien mon image qui s'enregistre et j'ai bien mon aperçu.
Pour changer le nom de l'image j'avais pensé à une auto-incrémentation du genre photo.jpg, photo2.jpg, photo3.jpg ... mais en pratique je ne sais pas le faire.

Posté : 27 mai 2008, 21:16
par jojolapine
tu peux te servir de la date et de l'heure...
ça donnerait pour le nom du fichier:
$nom=md5(microtime());

Posté : 27 mai 2008, 21:35
par fabrice88250
oui tres bonne idée sa fonctionne
$nom=md5(microtime()).'.jpg';
bon le nom de l'image ne ressemble a rien mais bon sa fonctionne. Merci.
Je vais essayé de passer par sql maintenant pour faire une galerie des snap.

Posté : 28 mai 2008, 00:09
par Hywan
Hey :),

J'arrive un peu après la bataille mais je te donne quand même l'idée. Si tu veux avoir fichier3.txt si fichier, fichier1 et 2 existe déjà, il faudrait si prendre de cette façon :
// soit :
$extension = /* on récupère l'extension du fichier */;
$fichier = /* fichier sans l'extension */;
$i = null;

// si notre fichier existe déjà, alors :
if(file_exists($fichier . '.' . $extension)) {

    $i = 0;
    // on commence à compter.
    while(file_exists($fichier . ++$i . '.' . $extension));
}

// Notre fichier :
echo $fichier . $i . '.' . $extension;
Pas testé, mais l'idée est là :).

Posté : 28 mai 2008, 00:47
par FredoMkb
How ;)

Moi aussi, après la bagarre, pour une autre proposition de nom avec les dates :

Pour Php > à 5.2.2 :
$nom = 'image-'.date('YmdHisu').'.jpg';
echo $nom; // 'image-2008052800410728067.jpg'
Pour les versions précédentes de Php :
$nom = 'image-'.date('YmdHis').substr(time(), -5).'.jpg';
echo $nom; // 'image-2008052800410728067.jpg'
Donc, le nom sera composé de la manière suivante :

- Le nom de base que tu auras choisi = 'image' par ex. ;
- Les 4 premiers chiffres = l'année en cours (2008) ;
- Les deux suivants = le mois en cours (05) ;
- Les deux qui suivent = le jours actuel (28) ;
- Les deux à la suite = l'heure présente (00) ;
- Ensuite, le autres deux = les minutes actuelles (41) ;
- Les deux suivantes = les secondes (07) ;
- Enfin, les 5 dernières = les millisecondes (28067) ;
- Pour finir, l'extension du fichier = '.jpg' par ex.

à+ ;)