2017-04-18 40 views
10

Próbuję pobrać alpha z PNG. Robię to z imagepng(). Mój problem jest alpha powraca tylko 0.Pobierz Alpha z PNG utworzonego za pomocą imagepng()

Mój kod do wykonywania PNG z kanałem alfa

$x = 1; 
$y = 1; 
$gd = imagecreatetruecolor($x, $y); 
imagesetpixel($gd, 0,0, imagecolorallocatealpha($gd, 200,200,200,1)); 
imageAlphaBlending($gd, false); 
imageSaveAlpha($gd, true); 
imagepng($gd,"test.png"); 
imagedestroy($gd); 

Mój kod do czytania PNG alfa

$im = imagecreatefrompng("test.png"); 
$rgb = imagecolorat($im, 0, 0); 
$colors = imagecolorsforindex($im, $rgb); 
$red = (int) $colors["red"]; 
$blue = (int) $colors["blue"]; 
$green = (int) $colors["green"]; 
$alpha = (int) $colors["alpha"]; // return only 0 

nie wiem dlaczego zwraca tylko 0, a nie 1.

Odpowiedz

7

Ty jesteś ould zadzwonić imageSaveAlpha i imageSaveAlpha przed wywołaniem imagesetpixel:

imageAlphaBlending($gd, false); 
imageSaveAlpha($gd, true); 
imagesetpixel($gd, 0,0, imagecolorallocatealpha($gd, 200,200,200,1)); 
+0

Nice! Dziękuję Ci. to było proste :-) !!! –

1

Frank,

Oto rozwiązanie z kodem

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>Test</title> 

    </head> 
    <body> 

     <a href="index.php" class="navbar-brand"> 
      <?php 
      $x = 1; 
      $y = 1; 
      $gd = imagecreatetruecolor($x, $y); 
      imageAlphaBlending($gd, false); 
      imageSaveAlpha($gd, true); 
      imagesetpixel($gd, 0, 0, imagecolorallocatealpha($gd, 200, 200, 200, 1)); 
      imagepng($gd, 'img/logo.png" '); 
      imagedestroy($gd); 

      $im = imagecreatefrompng('img/logo.png'); 
      $rgb = imagecolorat($im, 0, 0); 
      $colors = imagecolorsforindex($im, $rgb); 
      $red = (int) $colors["red"]; 
      $blue = (int) $colors["blue"]; 
      $green = (int) $colors["green"]; 
      echo $alpha = (int) $colors["alpha"]; // return only 0 
      ?> 
     </a> 

    </body> 
</html>