Przygotowywuje na stronę system tworzenia avatarów dla uzytkowników. Avatary docelowo mają znajdować się w ramce w kształcie koła. W tym celu przygotowałem szablon >kilk<. Użytkownik przesyła na serwer swoje zdjęcie, które jest zamieniane na kwadrat o wymiarach 265x265. Następnie planowałem nałożyć na to zdjęcie mój szablon z przeźroczystością. Jednak element , ktory jest przeźroczysty w szablonie zamienia się na biały w obrazie wynikowym. Nie doszukałem się rozwiązania mojego problemu w google, wiec pisze tutaj.
mój kod:
if( $_FILES['zdjecie']['error'] > 0) { //przekierowanie na stronę błędu } else { if($img_szer < 265 || $img_wys < 265) { //obraz za mały, przekierowanie na stronę błędu } else if($img_szer >= 265 || $img_wys >= 265) { //zapis obrazka na serwerze //skalowanie obrazka $zdjecie = imagecreatefrompng('images/users/'.$_FILES['zdjecie']['name']); $x = imagesx($zdjecie); $y = imagesy($zdjecie); $final_x = 265; $final_y = 265; $tmp_x = 0; $tmp_y = 0; if($y<$x) { } else if($x<$y) { } $nowe_zdjecie = imagecreatetruecolor($final_x, $final_y); imagecopyresampled($nowe_zdjecie, $zdjecie, 0, 0, $tmp_x, $tmp_y, $final_x, $final_y, $x-2*$tmp_x, $y-2*$tmp_y); imagepng($nowe_zdjecie, "images/users/nowe_zdjecie.png", 0); //nakladanie obrazków $zdjecie_big = imagecreatefrompng('images/users/nowe_zdjecie.png'); $szablon = imagecreatefrompng('images/szablon_big.png'); imagecopymerge($zdjecie_big, $szablon, 0, 0, 0, 0, imagesx($zdjecie_big), imagesy($zdjecie_big), 100); imagepng($zdjecie_big, "images/users/x_avatar.png", 0); } }
Niektóre wartości na sztywno, by łatwiej testować.
Pozdrawiam,
oskarro40
Edit: Tak to wyglada wynikowo: >klik<
a chciałbym aby było tak: >klik<
Przepraszam za spam... już rozwiazane:
if( $_FILES['zdjecie']['error'] > 0) { //przekierowanie na stronę błędu } else { if($img_szer < 265 || $img_wys < 265) { //obraz za mały, przekierowanie na stronę błędu } else if($img_szer >= 265 || $img_wys >= 265) { //zapis obrazka na serwerze //skalowanie obrazka $zdjecie = imagecreatefrompng('images/users/'.$_FILES['zdjecie']['name']); $x = imagesx($zdjecie); $y = imagesy($zdjecie); $final_x = 265; $final_y = 265; $tmp_x = 0; $tmp_y = 0; if($y<$x) { } else if($x<$y) { } $nowe_zdjecie = imagecreatetruecolor($final_x, $final_y); imagecopyresampled($nowe_zdjecie, $zdjecie, 0, 0, $tmp_x, $tmp_y, $final_x, $final_y, $x-2*$tmp_x, $y-2*$tmp_y); imagepng($nowe_zdjecie, "images/users/nowe_zdjecie.png", 0); //nakladanie obrazków $duze = imagecreatefrompng("images/users/nowe_zdjecie.png"); $w = imagesx($duze); $h = imagesy($duze); imagealphablending($duze,true); $szablon = imagecreatefrompng("images/szablon_big.png"); imagecopy($duze,$szablon,0,0,0,0,$w,$h); imagepng($duze,"images/users/output.jpg",0); } }