Autor Zpráva
Voju
Profil *
Dobrý den, setkal jsem se s jakýmsi problémem. Mám v png souboru uložené vrstvy černé barvy a přechodů šedé, přičemž čím více šedá, tím více je daný pixel průhledný. Ve své podstatě je to koule, která je místy zcela průhledná a místy jenom částečně.
Problém je v tom, že ve chvíli, kdy chci tuto průhlednou kouli vložit do nově tvořeného png pomocí php kódu, php jí zpracuje jako neprůhlednou kouli a vloží do jejího pozadí bílou barvu, čímž mi to kompletně zazdí. Cílem totiž je vložit tento "3D efekt" na předem vytvořené elipsy barev, které chci mít zobrazené...
Zkoušel jsem imagetransparent i pár dalších roztroušených návodů na internetu, ale žádný se nevěnoval této problematice bohužel..
Dokázal by mi tu někdo pomoct, prosím ? :)
ShiraNai7
Profil
imagealphablending( $targetImage, false );
imagesavealpha( $targetImage, true );


Zkus toto pouzit na resource vsech obrazku, se kterymi pracujes.
Pres vyhledavac si muzes najit spoustu mist, kde se tento problem resi ("php gd png transparency").
Voju
Profil *
Nerad se opakuji, ale znovu podotýkám, že po internetu se tento problém neřeší, respektive jsem na něj nenarazil. Jediné co jsem našel bylo zprůhlednění celého obrázku.. ale já chci aby si to pitomý PhP jenom vzalo PNG obrázek tak, jak už je udělanej :)...

... mimochodem, kód od tebe nedělá vůbec nic s tím pozadím :/
print
Profil *
imagecreatefrompng( $filename ) nefunguje?
Voju
Profil *
kdyby fungovalo, není co řešit :/
holi
Profil
print:
imagecreatefrompng( $filename ) nefunguje?

Toto mám sám ověřené že to nefunguje, místo alfa kanálů to doplní černou barvu.
Voju
Profil *
pokuď vůbec... mě to doplňovalo jenom jeden roh obrázku a zbytek (odříznutej neprůhledným obloukem) byl pro změnu bílej :/
NejakyTom
Profil
Tahle funkce to resi, staci orezat o zbytecnosti. Funguje to dobre jen pruhledny gif do gifu nejde. Ale png->gif nebo gif->png funguje. Samozrejme pracuje to i s JPG.
function image_upload($form, $path, $type, $width, $height, $name){
  if(!getimagesize($_FILES[$form]["tmp_name"])){
    return false;
  }else{
    $info = getimagesize($_FILES[$form]["tmp_name"]);
    if($info["mime"]=="image/png" or $info["mime"]=="image/jpeg" or $info["mime"]=="image/gif"){
      if($width<=0 or $height<=0){
        $width = $info[0];
        $height = $info[1];  
      }
      $image_temp = "../images/temp/".time()."_".rand(1000000, 9000000)."_temp";
      $move = move_uploaded_file($_FILES[$form]["tmp_name"], $image_temp);
      if($info["mime"]=="image/png"){
        $image_source = imagecreatefrompng($image_temp);
      }elseif($info["mime"]=="image/jpeg"){
        $image_source = imagecreatefromjpeg($image_temp);
      }elseif($info["mime"]=="image/gif"){
        $image_source = imagecreatefromgif($image_temp);
      }
      $image = imagecreatetruecolor($width, $height);
      if($info["mime"]=="image/png" or $info["mime"]=="image/gif"){
        $transparent_index = imagecolortransparent($image_source);
        if($transparent_index>=0){
          $transparent_color = imagecolorsforindex($image, $transparent_index);
          $transparent_index = imagecolorallocate($image, $transparent_color["red"], $transparent_color["green"], $transparent_color["blue"]);
          imagefill($image, 0, 0, $transparent_index);
          imagecolortransparent($image, $transparent_index);
        }elseif($info["mime"]=="image/png"){
          imagealphablending($image, false);
          $color = imagecolorallocatealpha($image, 0, 0, 0, 127);
          imagefill($image, 0, 0, $color);
          imagesavealpha($image, true);
        }
      }
      imagecopyresampled($image, $image_source, 0, 0, 0, 0, $width, $height, $info[0], $info[1]);
      if($type==1){
        imagejpeg($image, $path.$name, 100);
      }elseif($type==2){
        imagepng($image, $path.$name, 9);
      }elseif($type==3){
        imagegif($image, $path.$name);
      }
      unlink($image_temp);
      imagedestroy($image_source);
      imagedestroy($image);
      return true;
    }else{
      return false; 
    }
  }
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: