Imaginez ceci. J'ai un pixel de couleur (255,0,0) [rouge]. Personne ne peint dessus avec une couleur blanche avec * alpha. Je connais la couleur de fond, je sais avec quelle couleur elle a été peinte, j'ai besoin d'obtenir l'alpha de la couleur peinte. Comment?PHP GD: besoin de connaître une quantité alpha
Jusqu'ici, nous avons:
$im = imagecreatefrompng('public/images/bg-tmp.png');
// we need to find a nearest match for this array in every pixel
/*$colors = array(
array(255, 255, 255, 100),
array(255, 255, 255, 75),
array(255, 255, 255, 50),
array(255, 255, 255, 25),
array(255, 255, 255, 0),
);*/
// finding out the pixel color
$rgb = imagecolorat($im, 0, 6);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
var_dump($r, $g, $b);
Ok. Donc je fais un progrès.
$im = imagecreatefrompng('public/images/bg-tmp.png');
$pixels = array();
for($y = 0; $y < 24; $y++)
{
for($x = 0; $x < 24; $x++)
{
$rgb = imagecolorat($im, $x, $y);
// trois premières valeurs RVB des couleurs de fond $ pixels [] = array ($ x, $ y, calc_alpha_diff (0, 0, 0, (rgb $ >> 16) & 0xFF ($ rgb >> 8) & 0xFF, $ rgb & 0xFF)); }}
function calc_alpha_diff($R1,$G1,$B1,$R2,$G2,$B2)
{
$color_diff = max($R1,$R2) - min($R1,$R2) + max($G1,$G2) - min($G1,$G2) + max($B1,$B2) - min($B1,$B2);
$array = array
(
100 => 510, // 1
75 => 382, // 0.75
50 => 256, // 0.5
25 => 128, // 0.25
0 => 0 // 0
);
// find the nearest value
foreach($array as $key => $val)
{
$delta = abs($val - $color_diff);
if(!isset($min_delta) || $min_delta > $delta)
{
$min_delta = $delta;
$alpha = $key;
}
}
return $alpha;
}
$im = imagecreatetruecolor(24, 24);
foreach($pixels as $p)
{
if($p[2] != 0)
{
imagesetpixel($im, $p[0], $p[1], imagecolorallocatealpha($im, 255, 0, 0, $p[2]));
}
}
// make image transperant
imagecolortransparent($im, 0);
imagepng($im);
imagedestroy($im);
header('Content-type: image/png');
exit;
Ce code vous fournira un ~ bon résultat. Cependant, pas assez bon. S'il vous plaît suggérer des améliorations.