script de floutage en GD, problème
Posté : 24 janv. 2007, 17:11
Bonjour,
Je suis actuellement en train de créer des images à la volée avec GD. J'ai réussi a créer une ombre portée, mais j'aimerais aussi ajouter un flou sur cette ombre, pour la rendre plus esthétique.
J'ai trouvé un script qui devrait m'y aider, mais je rencontre un problème.
Pour info, le $image de $src['img'] = $image; est la résultante d'un autre script, dans lequel je crée l'ombre elle-meme.
D'ou provient cette erreur avec le imagecolorat() ?[/code]
Je suis actuellement en train de créer des images à la volée avec GD. J'ai réussi a créer une ombre portée, mais j'aimerais aussi ajouter un flou sur cette ombre, pour la rendre plus esthétique.
J'ai trouvé un script qui devrait m'y aider, mais je rencontre un problème.
$coeffs = array (
array ( 1),
array ( 1, 1),
array ( 1, 2, 1),
array ( 1, 3, 3, 1),
array ( 1, 4, 6, 4, 1),
array ( 1, 5, 10, 10, 5, 1),
array ( 1, 6, 15, 20, 15, 6, 1),
array ( 1, 7, 21, 35, 35, 21, 7, 1),
array ( 1, 8, 28, 56, 70, 56, 28, 8, 1),
array ( 1, 9, 36, 84, 126, 126, 84, 36, 9, 1),
array ( 1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1),
array ( 1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1)
);
$src = array();
$src['index'] = 8;
$src['sum'] = pow (2, $src['index']);
// On se procure les infos sur l'image (taille/type mime)
$src['infos'][0] = 200;
$src['infos'][1] = 200;
// On charge l'image de départ en fonction de son type
$src['img'] = $image;
$src['temp1'] = imagecreatetruecolor ($src['infos'][0], $src['infos'][1]);
$src['temp2'] = imagecreatetruecolor ($src['infos'][0], $src['infos'][1]);
// Traitement
for ( $i=0 ; $i < $src['infos'][0] ; ++$i ) {
for ( $j=0 ; $j < $src['infos'][1] ; ++$j ) {
$sumr=0;
$sumg=0;
$sumb=0;
for ( $k=0 ; $k <= $src['index'] ; ++$k ) {
$color = imagecolorat($src['img'], $i-(($src['index'])/2)+$k, $j);
$r = ($color >> 16) & 0xFF;
$g = ($color >> 8) & 0xFF;
$b = ($color) & 0xFF;
$sumr += $r*$coeffs[$src['index']][$k];
$sumg += $g*$coeffs[$src['index']][$k];
$sumb += $b*$coeffs[$src['index']][$k];
}
$color = imagecolorallocate ($src['temp1'], $sumr/$src['sum'], $sumg/$src['sum'], $sumb/$src['sum'] );
imagesetpixel($src['temp1'],$i,$j,$color);
}
}
imagedestroy($src['img']);
for ( $i=0 ; $i < $src['infos'][0] ; ++$i ) {
for ( $j=0 ; $j < $src['infos'][1] ; ++$j ) {
$sumr=0;
$sumg=0;
$sumb=0;
for ( $k=0 ; $k <= $src['index'] ; ++$k ) {
$color=imagecolorat($src['temp1'], $i, $j-(($src['index'])/2)+$k);
$r=($color >> 16) & 0xFF;
$g=($color >> 8) & 0xFF;
$b=($color) & 0xFF;
$sumr += $r*$coeffs[$src['index']][$k];
$sumg += $g*$coeffs[$src['index']][$k];
$sumb += $b*$coeffs[$src['index']][$k];
}
$color = imagecolorallocate ($src['temp2'], $sumr/$src['sum'], $sumg/$src['sum'], $sumb/$src['sum'] );
imagesetpixel($src['temp2'],$i,$j,$color);
}
}
imagedestroy($src['temp1']);
//header("Content-Type: image/png");
imagepng($src['temp2']);
J'obtiens un message d'erreur de ce type sous IE :
Il s'agit du colorallocat() de la premiere boucle. (et j'imagine bien que le problème existe aussi sur la deuxième boucle)/<b>Notice</b>: imagecolorat(): -4,0 is out of bounds in <b>c:\program files\easyphp1-8\www\...\...\gallery_create.php</b> on line <b>120</b><br />
Pour info, le $image de $src['img'] = $image; est la résultante d'un autre script, dans lequel je crée l'ombre elle-meme.
D'ou provient cette erreur avec le imagecolorat() ?[/code]
