Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: GD- zmiana zdjec pionowych na poziome
Forum PHP.pl > Forum > Przedszkole
swmikolaj21
Witam!

Chcialbym aby miniaturki zdjec zawsze byly w formacie poziomym (szerok>wysokosc). A jezeli ktos laduje na moj serwis pionowe zdjecie, to chcialbym zeby tworzyla sie miniaturka pozioma na zasadzie wyciecia srodka zdjecia (czyli tzw przyciecie).

Probowalem samemu taka funkcje znalezc ale sie nie udalo....

Ktos ma jakies sugestie lub porady? Bede wdzieczny...
Vogel
spróbuj napisać sam ;]

zalozmy ze masz zdjecie (szer1, wys1) i miniaturke (szer2, wys2). zmniejsz fotke by nowa_szerokosc = szer2 a nowa_wysokosc = szer1/wys1*szer2. i teraz jesli nowa_wysokosc > wys2 to przycinasz ja (nowa_wysokosc = wys2). pozosytało jedynie wysrodkowac i zresamplowac. proste ;]
swmikolaj21
Cytat(Vogel @ 2006-04-27 11:32:09)
jesli nowa_wysokosc > wys2 to przycinasz ja (nowa_wysokosc = wys2). pozosytało jedynie wysrodkowac i zresamplowac. proste ;]


Drogi Voglu: ja juz jestem na etapie stworzenia miniaturki, ale problemem jest to, co dla Ciebie jest chyba oczywistoscia, bo jak wezme nowa wysokosc=wys2 to znieksztalci zdjecia a nie przytnie...

Problemem jest wlasnie wysrodkowanie i zresamplowanie....
Vogel
  1. <?php
  2. function zmniejsz_foto($plik, $dx, $dy, $sciezka, $compression=75, $mode='proportional') {
  3.  
  4. $tmp = getimagesize($plik);
  5. switch ($tmp[2]) {
  6. case 1:
  7. $img_src = imagecreatefromgif($plik);
  8. break;
  9. case 2:
  10. $img_src = imagecreatefromjpeg($plik);
  11. break;
  12. case 3:
  13. $img_src = imagecreatefrompng($plik);
  14. break;
  15. case 6:
  16. $img_src = imagecreatefrombmp($plik);
  17. break;
  18. }
  19.  
  20.  
  21. $sx = $tmp[0];
  22. $sy = $tmp[1];
  23.  
  24. if ($mode == 'proportional') {
  25. if ($sx > $dx || $sy > $dy) {
  26. if ($dx/$dy > $sx/$sy) {
  27. $newX = $dy/$sy*$sx;
  28. $newY = $dy;
  29. }
  30. else {
  31. $newX = $dx;
  32. $newY = $dx/$sx*$sy;
  33. }
  34. $dx = $newX;
  35. $dy = $newY;
  36. }
  37. else {
  38. $dx = $newX = $sx;
  39. $dy = $newY = $sy;
  40. }
  41. $offY = $offX = 0;
  42. $cutY = $cutX = 0;
  43. }
  44. elseif ($mode == 'stretch') {
  45. if ($dx/$dy > $sx/$sy) {
  46. $newX = $dy/$sy*$sx;
  47. $newY = $dy;
  48. $offX = ($dx - $newX)/2;
  49. $offY = 0;
  50. }
  51. elseif ($dx/$dy < $sx/$sy) {
  52. $newX = $dx;
  53. $newY = $dx/$sx*$sy;
  54. $offX = 0;
  55. $offY = ($dy - $newY)/2;
  56. }
  57. else {
  58. $newX = $dx;
  59. $newY = $dy;
  60. $offX = 0;
  61. $offY = 0;
  62. }
  63. $cutY = $cutX = 0;
  64. }
  65. elseif ($mode == 'center') {
  66. if ($sx > $dx || $sy > $dy) {
  67. if ($dx/$dy > $sx/$sy) {
  68. $newX = $dy/$sy*$sx;
  69. $newY = $dy;
  70. $offX = ($dx - $newX)/2;
  71. $offY = 0;
  72. }
  73. elseif ($dx/$dy < $sx/$sy) {
  74. $newX = $dx;
  75. $newY = $dx/$sx*$sy;
  76. $offX = 0;
  77. $offY = ($dy - $newY)/2;
  78. }
  79. else {
  80. $newX = $dx;
  81. $newY = $dy;
  82. $offX = 0;
  83. $offY = 0;
  84. }
  85. }
  86. else {
  87. $newX = $sx;
  88. $newY = $sy;
  89. $offX = ($dx-$sx)/2;
  90. $offY = ($dy-$sy)/2;
  91. }
  92. $cutY = $cutX = 0;
  93. }
  94. elseif ($mode == 'cut') {
  95. if ($sx > $dx || $sy > $dy) {
  96. if ($dx/$dy < $sx/$sy) {
  97. $newX = $dy/$sy*$sx;
  98. $newY = $dy;
  99. $offX = ($dx - $newX)/2;
  100. $offY = 0;
  101. }
  102. elseif ($dx/$dy > $sx/$sy) {
  103. $newX = $dx;
  104. $newY = $dx/$sx*$sy;
  105. $offX = 0;
  106. $offY = ($dy - $newY)/2;
  107. }
  108. else {
  109. $newX = $dx;
  110. $newY = $dy;
  111. $offX = 0;
  112. $offY = 0;
  113. }
  114. }
  115. else {
  116. $newX = $sx;
  117. $newY = $sy;
  118. $offX = ($dx-$sx)/2;
  119. $offY = ($dy-$sy)/2;
  120. }
  121. $cutY = $cutX = 0;
  122. }
  123.  
  124. $img_dst = imagecreatetruecolor($dx,$dy);
  125. $white = imagecolorallocate($img_dst, 0, 0, 0);
  126. imagefill($img_dst, 0, 0, $white);
  127.  
  128. imagecopyresampled($img_dst, $img_src, $offX, $offY, $cutX, $cutY, $newX, $newY, $sx, $sy);
  129. imagejpeg($img_dst,$sciezka,$compression);
  130.  
  131. /*header('Content-type: image/jpeg');
  132. imagejpeg($img_dst);*/
  133.  
  134. imagedestroy($img_src);
  135. imagedestroy($img_dst);
  136.  
  137. }
  138. ?>



wygrzebałem gdzieś takiego staruszka. pobaw się. pozmieniaj i zobacz - powinienes juz latwo i szybko dojsc jak zrobic co chcesz ;]
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.