Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][GD] Problem z przeroczystością
Forum PHP.pl > Forum > Przedszkole
qba10
Mam oto taki skrypt skalowania obrazków (skrypt lekko zmodyfikowany nie mój- przykład taki)
  1. <?php
  2.  
  3.  
  4. function skaluj($adres, $szerokosc)
  5. {
  6.    // funkcja obsługuje również adresy internetowe jak http i ftp
  7.    $pobierz = @file_get_contents($adres);
  8.    $src = @imagecreatefromstring($pobierz);
  9.    imagealphablending($src, true);
  10.    imagesavealpha($src, true);
  11.    if (!$pobierz or !$src ) return false;
  12.    unset($pobierz);
  13.    
  14.    $pic_width = imagesx($src);
  15.    $pic_height = imagesy($src);
  16.    if (($szerokosc == $pic_width) or ($szerokosc == null)) return $src;
  17.    $mini_width = $szerokosc;
  18.    $mini_height = round($szerokosc * ($pic_height/$pic_width));
  19.    $mini = imagecreatetruecolor($mini_width, $mini_height);
  20.    imagecopyresampled($mini, $src, 0, 0, 0, 0, $mini_width, $mini_height, $pic_width, $pic_height);
  21.    return $mini;
  22. }
  23.  
  24.  
  25.  
  26. $obrazek = skaluj('stamp.png', 126); // druga wartość to szerokość w px
  27. header('Content-Type: image/png');
  28. imagepng($obrazek); // wyświetlenie obrazka przez którąś z funkcji np: imagepng, imgejpeg itd
  29. ?>


No i mam obrazek o wymiarach 128*128 png z fragmentami przezroczystymi:

No i go skaluje zamiast zachować przezroczystość, zmienia ją na czarny kolor:


Jak temu zaradzić?

Czy w ogóle da się to naprawić?

edit: Czy te funkcję (
imagealphablending($src, true);
imagesavealpha($src, true
);
} Coś pomagają?


Problem rozwiązany. Zamiast funkcji ImageCreateTrueColor użyłem funkcji ImageCreate
eai
To faktycznie działa, ale tracisz na jakości obrazu
RafaelX
imagesavealpha($src, true);

kanał alpha odpowiada za przeźroczystość

z MANUALA exclamation.gif!

// Turn off alpha blending and set alpha flag
imagealphablending($png, false);
imagesavealpha($png, true);


http://pl2.php.net/imagesavealpha

"" imagesavealpha() sets the flag to attempt to save full alpha channel information (as opposed to single-color transparency) when saving PNG images.

You have to unset alphablending (imagealphablending($im, false)), to use it. "

musisz dać false przy imagealphablending żeby działała przeźroczystość
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.