průhlednost u PNG
3 příspěvky
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Ahoj všem používám svou funkci na předělání velikosti obrázku (viz níže), ale teď jsem zjistil, že když do ní pustím PNG obrázek, který je v originále průhledný (pozadí), tak po zmenšení se mi udělá černé pozadí. a průhlednost je pryč. Koukám do toho hodiny Google taky nic, už si nevím rady. Děkuji.
-
function obrazek($sirka, $vyska, $soubor, $kam, $id, $dopocitat = 'nic') { //zjistime typ obrazku $imgtype=getimagesize($soubor); switch($imgtype[2]){ case 1: $im=imagecreatefromgif($soubor); $k = ".gif"; break; case 2: $im=imagecreatefromjpeg($soubor); $k = ".jpg"; break; case 3: $im=imagecreatefrompng($soubor); imagealphablending($im, true); $k = ".png"; break; } $src_width=imagesx($im); $src_height=imagesy($im); //ulozi se v originalni velikosti if($sirka == 0 and $vyska == 0) { $height1=$src_height; $width1=$src_width; $thumb1=imagecreatetruecolor($width1,$height1); imagealphablending($thumb1, true); imagecopyresampled($thumb1,$im,0,0,0,0,$width1,$height1,$src_width, $src_height); $tmp_cil1=$kam.$id.$k; if (file_exists($tmp_cil1)) unlink($tmp_cil1); switch($imgtype[2]){ case 1: imagegif($thumb1,$tmp_cil1); break; case 2: imagejpeg($thumb1,$tmp_cil1, 100); break; case 3: imagesavealpha($thumb1, true); imagepng($thumb1,$tmp_cil1); break; } imagedestroy($thumb1); } else { if($dopocitat == "sirku") { $height2=$vyska; $width2=$height2/$src_height*$src_width; } elseif($dopocitat == "vysku") { $width2=$sirka; $height2=$width2/$src_width*$src_height; } elseif($dopocitat == "nic") { $width2=$sirka; $height2=$vyska; } $thumb2=imagecreatetruecolor($width2,$height2); imagealphablending($thumb2, true); imagecopyresampled($thumb2,$im,0,0,0,0,$width2,$height2,$src_width, $src_height); $tmp_cil2=$kam.$id.$k; if (file_exists($tmp_cil2)) unlink($tmp_cil2); switch($imgtype[2]){ case 1: imagegif($thumb2,$tmp_cil2); break; case 2: imagejpeg($thumb2,$tmp_cil2, 100); break; case 3: imagesavealpha($thumb2, true); imagepng($thumb2,$tmp_cil2); break; } imagedestroy($thumb2); } }
-
Docela špatně se to tady čte.. takže jenom vložím kus kódu, u kterého (polo)průhlednost funguje. Je sice někdy z roku 2008, ale to snad vadit nebude.. :) public function load($filename,$alpha,$x,$y) { if(!$img = @imagecreatefrompng($filename)) { $img = imagecreatetruecolor($x,$y); //Blank image imagestring($img,1,5,5,'Background loading failed.',imagecolorallocate($img,255,255,255)); } elseif($alpha) { imagealphablending($img,true); imagesavealpha($img,true); } return $img; } public function create($x,$y,$transparent) { $img = imagecreatetruecolor($x,$y); if($transparent) { imagealphablending($img,true); imagecolortransparent($img,imagecolorallocate($img,0,0,0)); imagesavealpha($img,true); }else { imagealphablending($img,false); imagesavealpha($img,true); } return $img; } public function copy($dest,$source,$dstx,$dsty,$srcx,$srcy,$dstw,$dsth,$srcw,$srch) { imagealphablending($source,false); imagefill($source,0,0,imagecolortransparent($source,imagecolorallocatealpha($source,0,0,0,127))); imagesavealpha($source,true); imagecopyresampled($dest,$source,$dstx,$dsty,$srcx,$srcy,$dstw,$dsth,$srcw,$srch); return true; } public function save($img) { $filename = $this->path.'example.png'; imagepng($img,$filename); return true; } Přebrat si to ale budeš muset sám..