Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Image GD - samoczynna zmiana kolorów i jakości.
desavil
post
Post #1





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

Ostrzeżenie: (0%)
-----


Witajcie!

Mam zrobiony skrypt, który zmniejsza rozmiar obrazku jeżeli jego szerokość jest większa niż X.
Następnie tworzony jest nowy obrazek z białym tłem o takich samych wymiarach jak pomniejszony, tymże wysokość jego jest o 37px większa.
Na stworzone tło wstawiany jest zmniejszony obrazek, na samej górze, a w prawym dolnym rogu obrazek tzw. watermark o wysokości 35px.

Problem jest w tym, iż od momentu stworzenia tła (pustego obrazka, na który wszystko jest wklejane) to cały obrazek albo zmienia barwy, albo jest złej jakości lub czarno-biały. Nie wiem dlaczego tak się dzieje. Poniżej przedstawiam dwa obrazki do porównania:
Obrazek oryginalny: http://img209.imageshack.us/img209/8352/heheo.jpg
Obrazek przepuszczony przez skrypt: http://img39.imageshack.us/img39/5918/change.jpg

Kawałek kodu, który odpowiada za stworzenie nowego obrazka i połączenie ich wszystkich:
  1. $MAX_NEW_WIDTH = 676;
  2. $MAX_NEW_HEIGHT = 10000;
  3. if($fileName_type2[0] > $MAX_NEW_WIDTH){
  4. list($width, $height) = $fileName_type2;
  5. $scale = min($MAX_NEW_WIDTH/$width, $MAX_NEW_HEIGHT/$height);
  6. $new_width = floor($scale*$width);
  7. $new_height = floor($scale*$height);
  8. }else{ $new_width = $fileName_type2[0]; $new_height = $fileName_type2[1]; $width = $fileName_type2[0]; $height = $fileName_type2[1]; }
  9. if($fileName_type2['mime'] == 'image/png'){ $source = imagecreatefrompng($fileTmp); }else{ $source = imagecreatefromjpeg($fileTmp); }
  10. $dest = imagecreatetruecolor($new_width, $new_height);
  11. imagecopyresized($dest, $source, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  12.  
  13. $image1 = imagecreatefrompng('media/mark.png');
  14. $plik_w = imagesx($dest);
  15. if($plik_w < 249){ $plik_w_change = 249-$plik_w; $plik_w = $plik_w+$plik_w_change; }
  16. $plik_h = imagesy($dest)+37;
  17.  
  18. // START - Stworzenie obrazka, jeżeli pominę ten krok, kolory pozostają bez zmiany, prawidłowe są
  19. $obrazek111 = imagecreate($plik_w, $plik_h);
  20. imagecolorallocate($obrazek111, 255, 255, 255);
  21. imagecopy($obrazek111, $dest, 0, 0, 0, 0, imagesx($dest), imagesy($dest));
  22. // KONIEC
  23.  
  24. $znaczek_w = imagesx($image1);
  25. $znaczek_h = imagesy($image1);
  26. $od_x = $plik_w-$znaczek_w;
  27. $od_y = $plik_h-$znaczek_h;
  28. imagecopy($obrazek111, $image1, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h);
  29. if($fileName_type2['mime'] == 'image/png'){ imagepng($obrazek111,'media/'.$file_change); }else{ imagejpeg($obrazek111,'media/'.$file_change); }
  30. imagedestroy($image1);
  31. imagedestroy($obrazek111);
  32. unlink($fileTmp);

Z góry dziękuję za pomoc.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 04:58