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
 
Start new topic
Odpowiedzi (1 - 8)
ciekawskiii
post
Post #2





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

Ostrzeżenie: (30%)
XX---


nie jestem pewny ale spróbuj wywalić 20 linie
Go to the top of the page
+Quote Post
desavil
post
Post #3





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

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


Próbowałem, nic nie daje, tylko kolor tła inny.
Go to the top of the page
+Quote Post
ciekawskiii
post
Post #4





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

Ostrzeżenie: (30%)
XX---


to nie mam pojęcia a nie chce mi sie do siebie wrzucac kodu i sprawdzac. Kiedys robilem cos podobnego ale z kolorami problemu nie mialem.
Jedyne co mi przychodzi do glowy to zamiana imagecreate w linii 19 na imagecreatetruecolor()
Go to the top of the page
+Quote Post
desavil
post
Post #5





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

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


Dzięki, jesteś WIELKI :]
Tylko kolor tła teraz się nie zmienia, jest czarny a ma być miały.

Ten post edytował desavil 28.12.2011, 19:30:54
Go to the top of the page
+Quote Post
ciekawskiii
post
Post #6





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

Ostrzeżenie: (30%)
XX---


teraz wywal imagecolorallocate bo ta funkcja tworzy tło a imagecreatetruecolor pobiera rzeczywiste kolory
Go to the top of the page
+Quote Post
desavil
post
Post #7





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

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


Zostawiłem tak:
  1. $plik_h = imagesy($dest)+37;
  2.  
  3. $obrazek111 = imagecreatetruecolor($plik_w, $plik_h);
  4. imagecopy($obrazek111, $dest, 10, 10, 0, 0, imagesx($dest), imagesy($dest));

Teraz w jaki sposób mogę nadać kolor tłu?

@edit:
Zrobiłem za pomocą:
  1. $plik_h = imagesy($dest)+37;
  2.  
  3. $obrazek111 = imagecreatetruecolor($plik_w, $plik_h);
  4. $obrazek112 = imagecolorallocate($obrazek111, 245, 245, 245);
  5. imagefill($obrazek111, 0, 0, $obrazek112);
  6. imagecopy($obrazek111, $dest, 10, 10, 0, 0, imagesx($dest), imagesy($dest));


Ten post edytował desavil 28.12.2011, 19:38:44
Go to the top of the page
+Quote Post
ciekawskiii
post
Post #8





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

Ostrzeżenie: (30%)
XX---


ehh sam juz sie pogubilem.
Nie zostawia Ci rzeczywistego koloru tla teraz? powinno być ok
edit:
Ale jak bedziesz mial czarne tlo to Ci zmieni na biale i tez nie bedzie ok

Ten post edytował ciekawskiii 28.12.2011, 19:41:40
Go to the top of the page
+Quote Post
desavil
post
Post #9





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

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


Dobrze jest, cały czas białe daje. (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 23.12.2025 - 12:11