Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Rozwiązany][PHP]Po zmianie wielkości tracą się kolory.
Radeko
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 31.05.2009

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


Witam (IMG:style_emoticons/default/smile.gif)

Na własne potrzeby napisałem skrypt, który ma tworzyć miniaturki.
Wszystko działa ok, poza ty że po zmianie miniaturki tracą kolory lub jakość.

Oto sktypt:
  1. $filename = '../photos/' . $_FILES['upload_file']['name'];
  2. $gd_function_suffix = array(
  3. 'image/pjpeg' => 'JPEG',
  4. 'image/jpeg' => 'JPEG',
  5. 'image/gif' => 'GIF',
  6. 'image/bmp' => 'WBMP',
  7. 'image/png' => 'PNG'
  8. );
  9.  
  10. $size = GetImageSize($filename);
  11. if($size[0] < 200){
  12. $thumbnail_width = $size[0];
  13. }
  14. else {
  15.  
  16. $thumbnail_width = 200;
  17. }
  18. if($size[1] < 200){
  19. $thumbnail_width = $size[0];
  20. }
  21. else {
  22.  
  23. $thumbnail_height = 200;
  24. }
  25.  
  26. $filetype = 'image/png';
  27. $function_suffix = $gd_function_suffix[$filetype];
  28. $function_to_read = "ImageCreateFrom".$function_suffix;
  29. $function_to_write = "Image".$function_suffix;
  30.  
  31. $source_handle = $function_to_read ( $filename );
  32.  
  33. if($source_handle)
  34. {
  35. // Let's create an blank image for the thumbnail
  36. $destination_handle = ImageCreate ( $thumbnail_width, $thumbnail_height );
  37.  
  38. // Now we resize it
  39. imagecopyresampled( $destination_handle, $source_handle, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $size[0], $size[1] );
  40. }
  41. $function_to_write( $destination_handle, "../thumbnails/tb_" . $_FILES['upload_file']['name'] );
  42. ImageDestroy($destination_handle );


Załączam też przykład zmian:
(IMG:http://radeko.net16.net/prace/girl.png)
(IMG:http://radeko.net16.net/prace/tb_girl.png)

Z góry dzięki za pomoc (IMG:style_emoticons/default/smile.gif)


Edytuję ten post dla forumowiczów, którzy mają podobny problem i dla tych którzy nie mieli pojęcia jak go rozwiązać.
Rozwiązanie znalazłem po kilku dniach poszukiwań na anglojęzycznych forach i postanowiłem się podzielić odkryciem, aby zaoszczędzić innym czasu.
Ale do rzeczy, w starej wersji PHP używało się funkcji imagecreate() i ją często spotykamy w starszych skryptach, ale w nowej przy jej użyciu tracą się kolorki (patrz 1 post), w nowej wersji trzeba użyć funkcji imagecreatetruecolor() i wszystko działa.
Temat do zamknięcia.

Pozdrawiam Radeko.

Ten post edytował Radeko 11.11.2009, 19:01:04
Go to the top of the page
+Quote Post
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


może powinieneś użyć
  1. imagecreatetruecolor
?

Ja mam tak i wszystko działa (ale tworzę jpg z jpg)

  1. //(...)
  2. // współczynnik pomniejszenia
  3. $scaling_ratio = 7;
  4. // współczynnik jakości 0-100 (100 max):
  5. $quality = 100;
  6. $x = $img_width;
  7. $y = $img_height;
  8. $img = imagecreatefromjpeg($filename);
  9. $rescaleX = $x/$scaling_ratio;
  10. $rescaleY = $y/$scaling_ratio;
  11. $imgmini = imagecreatetruecolor($rescaleX, $rescaleY);
  12. imagecopyresampled($imgmini, $img,0,0,0,0,$rescaleX,$rescaleY,$x,$y);
  13. imagejpeg($imgmini,$mini_filename,$quality);
  14. //(...)


OK NIE ZAUWAŻYŁEM NA KOŃCU ŻE TEMAT ZAMKNIĘTY (a więc trop był dobry (IMG:style_emoticons/default/smile.gif) )

Ten post edytował darko 11.11.2009, 20:28:32
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.08.2025 - 02:04