Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Rozwiązany][PHP]Po zmianie wielkości tracą się kolory.
Forum PHP.pl > Forum > Przedszkole
Radeko
Witam 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:



Z góry dzięki za pomoc 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.
darko
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 smile.gif )
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.