Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> tworzenie miniatur o stałym rozmiarze
deha21
post 24.03.2010, 11:54:59
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 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
Fifi209
post 24.03.2010, 12:25:45
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Jakby mało było na necie tego
http://www.google.pl/search?client=firefox...Szukaj+w+Google


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
deha21
post 24.03.2010, 12:49:35
Post #3





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

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


...wiedziałem, że trafi się taka odpowiedź.
Samo tworzenie miniatur jak widać jest zrobione i działa. Wszystkie skrypty przeznaczone do tego nie mówią o tym co ja chce zrobić. Jakbym to umiał zrobić czy bym to znalazł to bym tu nie pisał. A trochę się naszukałem.


--------------------
Go to the top of the page
+Quote Post
thek
post 24.03.2010, 14:36:20
Post #4





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




A czemu nie olewasz ratio? winksmiley.jpg Skoro i tak wielkości width oraz height mają być stałe to po co właściwie liczyć proporcję? winksmiley.jpg Ma być 200x100 to na sztywno tak przy miniaturce ustawiaj. imagecopyresampled samo z siebie "skurczy" obrazek do danych wymiarów i zniekształci na odowiedniej osi by pasowało. W ten sposób z obrazka koła stworzysz elipsę bez problemu. Sam czasem tę właściwość wykorzystuję gdy nie mam ochoty na miniaturkach rzędu 60x48 zamiaru zachowywać proporcji. A user kliknie i tak wyświetlenie oryginału bo nie będzie z lupą przy monitorze siedział smile.gif I nie obchodzi mnie wtedy czy oryginał miał 640x480 czy 480x640 biggrin.gif Kto by owo 60x48 oglądał? winksmiley.jpg


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
deha21
post 29.03.2010, 08:29:58
Post #5





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

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


Czyli ma być coś takiego?
  1. imagecopyresampled($th, $img, 0, 0, 0, 0, 150, 150, $info[0], $info[1]);

Robi taką miniaturę ale wtedy na wysokość się kurczy. A właśnie tego chcę uniknąć.


--------------------
Go to the top of the page
+Quote Post
thek
post 29.03.2010, 11:34:33
Post #6





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ć.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
deha21
post 29.03.2010, 13:03:45
Post #7





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

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


Nie wiem czy dobrze mnie zrozumiałeś. Chodzi o to, że wrzucając obrazek o obojętnie jakich wymiarach, ma się tworzyć miniaturka 150x150 (kwadratowa chyba będzie lepsza) ale przy tym zachowując proporcje. A jak coś się nie zmieści na niej to żeby obcinało resztę.
Coś takiego:
http://img171.imageshack.us/img171/7703/miniyz.jpg

I tak samo żeby się robiło z miniaturami gdzie H>W.


--------------------
Go to the top of the page
+Quote Post
thek
post 29.03.2010, 14:34:51
Post #8





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




Czyli Twój to przypadek nr1 opisany przeze mnie + przesunięcie w odpowiednie miejsce na obrazku wynikowym. Naprawdę sprawdź co oznaczają wszystkie parametry w funkcji imagecopyresampled ze szczególnym uwzględnieniem 3, 4, 7 i 8 a resztę robisz tylko tak, że ustawiasz większą z wartości width lub height na 150, a mniejszą według niej skalujesz.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 10:13