php - v GD mi nejde transparentrost pre imagecopy

Sekcia: Programovanie 15.05.2007 | 21:38
Avatar Frantisek Klabzuba Debian  Používateľ
Mam problem, nefunguje mi nejak transparentnost. Tento kus kodu vezme obrazok "nove/text.png", potom "nove/mask.png" (obsahuje aj bielu farbu). Chcem spravit to ze vytvorim obrazok z text.png kde bude len to, kde maska obsahovala bielu farbu, zvysok bude transparentny:

<?php
header ('Content-type: text/html');

$text_fname = "nove/text.png";
$mask_fname = "nove/mask.png";

// getimagesize vracia pole, preto ten list
list($text_width, $text_height) = getimagesize($text_fname);
list($mask_width, $mask_height) = getimagesize($mask_fname);

// natiahneme obrazok text a mask
$text = imagecreatefrompng($text_fname) or die ("chyba c.1");
$mask = imagecreatefrompng($mask_fname) or die ("chyba c.2");

// nastavime maske transparentnost na bielu farbu
$biela = imagecolorallocate ($mask, 255, 255, 255);
imagecolortransparent($mask,$biela);

// mozete si skontrolovat ze tam kde bola maska biela je teraz priehladna
imagepng($mask,"nove/1.png");

// vlozime masku do textu (tam kde je maska transparentna by malo byt vidiet text)
imagecopy($text,$mask,10,10,0,0,$mask_width,$mask_height);

// ulozime ako novy a zobrazime, problem je ten ze tam kde bola maska transparenta je biela!
imagepng($text,"nove/novy.png");

echo "<img src=\"nove/novy.png\">";
?>

Tu su obrazky: nove/text.png nove/mask.png
    • Re: php - v GD mi nejde transparentrost pre imagecopy 19.05.2007 | 16:09
      Avatar Miroslav Bendík Gentoo  Administrátor
      imageAlphaBlending($img, false);
      imageSaveAlpha($img, true);
      
      Toto zapne kanál v alfa obrázkoch (je potrebné volať po otvorení obrázka aj po skopírovani pred ukladaním).
      • Re: php - v GD mi nejde transparentrost pre imagecopy 22.05.2007 | 15:01
        Avatar Frantisek Klabzuba Debian  Používateľ
        No to tvoje som neskusal ale medzitym som prisiel na to ze ako transparentnu farbu nieje mozne pouzivat farbu ktora bola pre dany obrazok alokovana ako prva, t.j.

        Namiesto tohoto:

        $mask = imagecreatefrompng($mask_fname) or die ("chyba c.2");
        $biela = imagecolorallocate ($mask, 255, 255, 255);

        Treba pouzit toto

        $mask = imagecreatefrompng($mask_fname) or die ("chyba c.2");
        $docasna = imagecolorallocate ($mask, 0, 0, 0);
        $biela = imagecolorallocate ($mask, 255, 255, 255);

        Potom mozno ako transparentnu nastavit bielu lebo nebola alokovana ako prva
        • Re: php - v GD mi nejde transparentrost pre imagecopy 24.05.2007 | 01:35
          Avatar Frantisek Klabzuba Debian  Používateľ
          beriem spat, nie je to v tom. Problem je v sposobe akym vytvaram masku (tiez skriptom), ked ju pouzijem priamo tak to nefunguje ale ked masku otvorim a znovu ulozim v gimpe tak uz to funguje. Nejak nepomaha ani to tvoje. Skusal som snad uz vsetko, seriem na to, spravim to v cykle for x,y... prejdem cely obrazok ak je tam RGB=255,0,255 tak to neskopirujem, hotovo.
          • Re: php - v GD mi nejde transparentrost pre imagecopy 24.05.2007 | 12:17
            Avatar titanik mint  Používateľ
            skus imagecreatetruecolor();
    • Re: php - v GD mi nejde transparentrost pre imagecopy 27.05.2007 | 01:38
      Avatar Frantisek Klabzuba Debian  Používateľ
      Overene, v cykle for x,y to funguje. Proste v GD nefunguje priehladnost.