Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt generujący miniaturki obrazków
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
northwest
Witam serdecznie,
Poszukuję skryptu do generowania miniaturek obrazków twarzy (zmniejszamy do 100x150px). Chciałbym aby skrypt działał następująco:
1.Oryginalne wymiary zdjęcia to: 500 (szerokość zdjęcia) x 218 (wysokość zdjęcia) czyli zdjęcie "za szerokie" (po pomniejszeniu mielibyśmy wymiar 344x150, a nam potrzeba zdjęcia o rozmiarze 100x150). Zatem z takiego zdjęcia musimy odciąć część z lewej strony i część z prawej strony. Jeśli zrobimy, żeby zdjęcie miało wymiary w zaokrągleniu 145x218 to można je wtedy zeskalować do wymiaru 100x150. Skoro zdjęcie ma 500 pikseli szerokości, a nam potrzeba 145, to musimy "pozbyć się" 355 pikseli. Jeśli te 355 pikseli podzielimy na 2 (bo z lewej i prawej strony mamy uciąć tyle samo), to powinniśmy uciąć z lewej i prawej strony oryginalnego zdjęcia po około 175 pikseli.

2.Oryginalne wymiary zdjęcia to: 980 (szerokość zdjęcia) x 2375 (wysokość zdjęcia) czyli zdjęcie "za wysokie" (po pomniejszeniu mielibyśmy wymiar 100x242, a nam potrzeba zdjęcia o rozmiarze 100x150). Z takiego zdjęcia musimy odciąć dół (tu w odróżnieniu od pierwszego przykładu nie centrujemy tylko z dołu zdjęcia "odcinamy" niepotrzebną część - bo głowa osoby z reguły od samej góry jest pokazywana na zdjęciu). Czyli nasze zdjęcie powinno mieć 980x1470 pikseli, aby można było je później zeskalować do 100x150 pikseli. Musimy zatem odciąć od dołu dokładnie 905 pikseli, aby otrzymać zdjęcie które nas interesuje (980x1470 px), a następnie pomniejszyć je do 100x150 px.


Zna ktoś może jakiś skrypt który potrafi wygenerować takie miniaturki?

Bardzo proszę o pomoc,
Northwest
trueblue
Google-> php resize crop image
http://forrst.com/posts/PHP_Resize_Crop_Im...to_Best_Fit-sel
northwest
Dziękuję bardzo za pomoc smile.gif

mam ten skrypt:
  1. resize_image("diaz_duze5.jpg", "m_diaz_duze5.jpg");
  2.  
  3. function resize_image($source_image, $destination_filename, $width = 100, $height = 150, $quality = 70, $crop = true)
  4. {
  5.  
  6. if( ! $image_data = getimagesize( $source_image ) )
  7. {
  8. return false;
  9. }
  10.  
  11. switch( $image_data['mime'] )
  12. {
  13. case 'image/gif':
  14. $get_func = 'imagecreatefromgif';
  15. $suffix = ".gif";
  16. break;
  17. case 'image/jpeg';
  18. $get_func = 'imagecreatefromjpeg';
  19. $suffix = ".jpg";
  20. break;
  21. case 'image/png':
  22. $get_func = 'imagecreatefrompng';
  23. $suffix = ".png";
  24. break;
  25. }
  26.  
  27. $img_original = call_user_func( $get_func, $source_image );
  28. $old_width = $image_data[0];
  29. $old_height = $image_data[1];
  30. $new_width = $width;
  31. $new_height = $height;
  32. $src_x = 0;
  33. $src_y = 0;
  34. $current_ratio = round( $old_width / $old_height, 2 );
  35. $desired_ratio_after = round( $width / $height, 2 );
  36. $desired_ratio_before = round( $height / $width, 2 );
  37.  
  38. if( $old_width < $width || $old_height < $height )
  39. {
  40. /**
  41.   * The desired image size is bigger than the original image.
  42.   * Best not to do anything at all really.
  43.   */
  44. return false;
  45. }
  46.  
  47.  
  48. /**
  49.   * If the crop option is left on, it will take an image and best fit it
  50.   * so it will always come out the exact specified size.
  51.   */
  52. if( $crop )
  53. {
  54. /**
  55.   * create empty image of the specified size
  56.   */
  57. $new_image = imagecreatetruecolor( $width, $height );
  58.  
  59. /**
  60.   * Landscape Image
  61.   */
  62. if( $current_ratio > $desired_ratio_after )
  63. {
  64. $new_width = $old_width * $height / $old_height;
  65. }
  66.  
  67. /**
  68.   * Nearly square ratio image.
  69.   */
  70. if( $current_ratio > $desired_ratio_before && $current_ratio < $desired_ratio_after )
  71. {
  72. if( $old_width > $old_height )
  73. {
  74. $new_height = max( $width, $height );
  75. $new_width = $old_width * $new_height / $old_height;
  76. }
  77. else
  78. {
  79. $new_height = $old_height * $width / $old_width;
  80. }
  81. }
  82.  
  83. /**
  84.   * Portrait sized image
  85.   */
  86. if( $current_ratio < $desired_ratio_before )
  87. {
  88. $new_height = $old_height * $width / $old_width;
  89. }
  90.  
  91. /**
  92.   * Find out the ratio of the original photo to it's new, thumbnail-based size
  93.   * for both the width and the height. It's used to find out where to crop.
  94.   */
  95. $width_ratio = $old_width / $new_width;
  96. $height_ratio = $old_height / $new_height;
  97.  
  98. /**
  99.   * Calculate where to crop based on the center of the image
  100.   */
  101. $src_x = floor( ( ( $new_width - $width ) / 2 ) * $width_ratio );
  102. $src_y = round( ( ( $new_height - $height ) / 2 ) );
  103. }
  104. /**
  105.   * Don't crop the image, just resize it proportionally
  106.   */
  107. else
  108. {
  109. if( $old_width > $old_height )
  110. {
  111. $ratio = max( $old_width, $old_height ) / max( $width, $height );
  112. }else{
  113. $ratio = max( $old_width, $old_height ) / min( $width, $height );
  114. }
  115.  
  116. $new_width = $old_width / $ratio;
  117. $new_height = $old_height / $ratio;
  118.  
  119. $new_image = imagecreatetruecolor( $new_width, $new_height );
  120. }
  121.  
  122. /**
  123.   * Where all the real magic happens
  124.   */
  125. imagecopyresampled( $new_image, $img_original, 0, 0, $src_x, $src_y, $new_width, $new_height, $old_width, $old_height );
  126.  
  127. /**
  128.   * Save it as a JPG File with our $destination_filename param.
  129.   */
  130. imagejpeg( $new_image, $destination_filename, $quality );
  131.  
  132. /**
  133.   * Destroy the evidence!
  134.   */
  135. imagedestroy( $new_image );
  136. imagedestroy( $img_original );
  137.  
  138. /**
  139.   * Return true because it worked and we're happy. Let the dancing commence!
  140.   */
  141. return true;
  142. }


I wszystko mi działa prócz zmniejszania obrazka o takich wymiarach:
- oryginał: http://stepby.pl/imag/diaz_duze2.jpg
- wychodzi: http://stepby.pl/imag/diaz_male2.jpg
- powinno wyjść: http://stepby.pl/imag/m_diaz_duze2.jpg

Ma ktoś może pomysł przez co się to źle generuje?

Z góry dziękuję za pomoc smile.gif
trueblue
Z tego co widzę, to skrypt wygenerował poprawną miniaturę, a Twój przykład: http://stepby.pl/imag/m_diaz_duze2.jpg wygląda dość specyficznie. Chcesz otrzymywać w przypadku landscape niepoprawnie przeskalowaną miniaturę z takim kadrowaniem?
northwest
Ojej, przepraszam - złe linki podałem!! sad.gif
- powinno wyjść: http://stepby.pl/imag/diaz_male2.jpg
- wychodzi: http://stepby.pl/imag/m_diaz_duze2.jpg

Przepraszam za gafę :/
trueblue
W liniach 70 i 86 zmień if na elseif
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-2024 Invision Power Services, Inc.