Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> tworzenie miniatur o stałym rozmiarze
deha21
post
Post #1





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


Mam skrypt galerii w którym jest tworzenie miniatur. Ale problem jest taki że przy zdjęciach które mają większe height niż width to miniatura tworzy się na szerokość dobrze ale proporcje robią swoje i miniaturka zamiast mieć np. 150x112 ma 150x330. A chciałbym żeby było 150x112 bez względu na to czy zdjęcie jest długie czy wysokie.
Mam kod, pisałem go już dawno i w sumie nie wiele z niego pamiętam (IMG:style_emoticons/default/winksmiley.jpg) Zresztą w temacie miniaturek jestem w ogóle słaby:

  1. $arr = pathinfo($_FILES["Filedata"]["name"]);
  2. $arr['extension'] = strtolower($arr['extension']);
  3. $file=uniqid().".".$arr['extension'];
  4.  
  5. move_uploaded_file($_FILES["Filedata"]["tmp_name"], "../files/gallery/".$id."/".$file);
  6.  
  7. ini_set("memory_limit","70M");
  8.  
  9. $infoo = getimagesize("../files/gallery/".$id."/".$file);
  10.  
  11. function resize($filef, $new_width, $new_height, $thumb, $quality) {
  12. $info = getimagesize($filef);
  13. if ($info === false)
  14. return false;
  15. $img = null;
  16. switch($info[2]){
  17. case IMAGETYPE_JPEG:
  18. $img = imagecreatefromjpeg($filef);
  19. break;
  20. case IMAGETYPE_GIF:
  21. $img = imagecreatefromgif($filef);
  22. break;
  23. case IMAGETYPE_PNG:
  24. $img = imagecreatefrompng($filef);
  25. break;
  26. default:
  27. return false;
  28. }
  29. $th = imagecreatetruecolor($new_width, $new_height);
  30.  
  31.  
  32. switch($info[2]){
  33. case IMAGETYPE_JPEG:
  34. imagecopyresampled($th, $img, 0, 0, 0, 0, $new_width, $new_height, $info[0], $info[1]);
  35. imagejpeg($th, $filef, $quality);
  36. break;
  37. case IMAGETYPE_GIF:
  38. imagealphablending($th, true);
  39. imagetruecolortopalette($img, true, 256);
  40. imagecopyresampled($th, $img, 0, 0, 0, 0, $new_width, $new_height, $info[0], $info[1]);
  41. imagegif($th, $filef);
  42. break;
  43. case IMAGETYPE_PNG:
  44. imagealphablending($th, false);
  45. imagesavealpha($th, true);
  46. imagecopyresampled($th, $img, 0, 0, 0, 0, $new_width, $new_height, $info[0], $info[1]);
  47. imagepng($th, $filef);
  48. break;
  49. }
  50. imagedestroy($th);
  51. imagedestroy($img);
  52. return true;
  53.  
  54. }
  55.  
  56. if ($infoo[0]>1024) {
  57. $height = (1024/$infoo[0])*$infoo[1];
  58. resize("../files/gallery/".$id."/".$file, 1024, $height, "../files/gallery/".$id."/".$file, 95);
  59. }
  60.  
  61. copy("../files/gallery/".$id."/".$file,"../files/gallery/".$id."/thumb_".$file);
  62. $thumb_height = (150/$infoo[0])*$infoo[1];
  63. resize("../files/gallery/".$id."/thumb_".$file, 150, $thumb_height, "../files/gallery/".$id."/thumb_".$file, 95);
  64.  


Aha, nie chciałbym używać gotowych skryptów czy bibliotek bo najpierw chciałbym wszystko zrozumieć a potem dopiero bawić sie w coś bardziej skomplikowanego.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Sam mówiłeś, że ma się kurczyć z 330 do 112, bo miniaturka ma mieć z góry określone wymiary, niezależne od współczynnika proporcjonalności. Albo więc chcesz go zachować i w przypadku obrazka tę większą wartość będziesz przyjmował jako 150 i mniejszą skalował by zachować proporcje, albo ustawisz obie na określoną wartość, ale wtedy obrazek straci proporcje. Nie da się obu rzeczy jednocześnie mieć.
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: 26.12.2025 - 00:40