Contours

Contenu du snippet

ce code permet d'avoir une image qui montre ou sont les contours. plus c'est blanc, plus il y a de chance qu'on se trouve sur un contour...

Source / Exemple :


<?php
set_time_limit(0);

function int2rvb($i){
	$b=$i%256;
	$v=((($i-$b)/256)%256);
	$r=((($i-$b)/256-$v)/256);
	return array($r, $v, $b);
}
function rvb2int($r, $v, $b){
	return ($r*256+$v)*256+$b;
}
function ecartype($liste, $l){
	$m=0;
	foreach ($liste as $v){
		$m+=$v;
	}
	$m/=$l;
	$e=0;
	foreach ($liste as $v){
		$e+=abs($v-$m);
	}
	return (int)($e/$l);
}
//$cache_color=array();
function couleur(&$img, &$i, &$j){
	//global $cache_color;
	//if (isset($cache_color[$i][$j])) return $cache_color[$i][$j];
	$a=int2rvb(imagecolorAt($img, $i, $j));
	//$cache_color[$i][$j]=$a;
	return $a;
}
function contraste(&$img, $x, $y, $dimX, $dimY, $cherche){
	$listeR=array();
	$listeV=array();
	$listeB=array();
	$mx=max(0, $x-$cherche);
	$Mx=min($dimX-1, $x+$cherche);
	$my=max(0, $y-$cherche);
	$My=min($dimY-1, $y+$cherche);
	$nbr=($Mx-$mx+1)*($My-$my+1);
	for ($i=$mx; $i<=$Mx; $i++){
		for ($j=$my; $j<=$My; $j++){
			list($r, $v, $b)=couleur($img, $i, $j);
			$listeR[]=$r;
			$listeV[]=$v;
			$listeB[]=$b;
		}
	}
	return array(ecartype($listeR, $nbr)*4,ecartype($listeV, $nbr)*4,ecartype($listeB, $nbr)*4);
}
$img=ImageCreateFromjpeg('11.jpg');
$x=imagesX($img);
$y=imagesY($img);

$img2=imageCreateTrueColor($x, $y);
$black = ImageColorAllocate ($img2, 0, 0, 0);
for ($i=0;$i<$x;$i++){
	for ($j=0;$j<$y;$j++){
		list($r, $v, $b)=contraste($img, $i, $j, $x, $y, 2);
		$a=rvb2int($r, $v, $b);
		imageline($img2, $i, $j, $i+1, $j+1, $a);
	}
	//if ($i%40==0)imagepng($img2, 'result'.$i.'.png');
}

imagepng($img2, '11.png');

?>

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.