Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zmiana rozmiaru przesyłanego obrazku, Upload obrazu
Mephis
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 1
Dołączył: 16.12.2012

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


Witam.

Mam sobie taki oto kod:
  1. $uploaddir = "obrazki_profilowe"; //katalog uploadu
  2. $allowed_ext = "jpg, gif, png"; //mozliwe rozszerzenia
  3. $max_size = "20480"; //maksymalna waga
  4. $max_height = "140"; //maksymalna wysokosc
  5. $max_width = "140"; //maksymalna szerokosc
  6.  
  7. $extension = pathinfo($_FILES['file']['name']);
  8. $extension = $extension[extension];
  9. $allowed_paths = explode(", ", $allowed_ext);
  10.  
  11. for($i = 0; $i < count($allowed_paths); $i++) {
  12. if ($allowed_paths[$i] == "$extension")
  13. {
  14. $ok = "1";
  15. }
  16. }
  17.  
  18. //jezeli obraz za duzo wazy
  19. if ($ok == "1") {
  20. if($_FILES['file']['size'] > $max_size)
  21. {
  22. print "zbyt duza waga pliku";
  23. }
  24.  
  25. //jezeli obrazek ma nieprawidowe rozmiary
  26. if ($max_width && $max_height) {
  27. list($width, $height, $type, $w) = getimagesize($_FILES['file']['tmp_name']);
  28. if($width > $max_width || $height > $max_height)
  29. {
  30. print "nieprawidlowe rozmiary obrazu";
  31. }
  32. }
  33.  
  34. //upload
  35. if(is_uploaded_file($_FILES['file']['tmp_name']))
  36. {
  37. move_uploaded_file($_FILES['file']['tmp_name'],$uploaddir.'/'.$_FILES['file']['name']);
  38. }
  39. print "przeslano pomyslnie";
  40. } else {
  41. print "nie wybrano pliku";
  42. }


No i teraz tak. Potrzebuje przeróbki tego kodu tak, aby...
- uploadowany obrazek dopasowywał się do maksymalnej wysokości i szerokości podanej w danych (140x140px), niezależnie od rzeczywistego rozmiaru
- ten sam obrazek ma zrobić sobie jeszcze miniaturę zdjęcia o rozmiarach np. 50x50 i żeby został zapisany z jakimś dodatkiem do nazwy np. "PLIK-mini"

Uprzejmie proszę o pomoc.

Pozwolę sobie na zaktualizowanie wątku.

Póki co nie ma nawet co przerabiać kod, gdyż skrypt z niewiadomych powodów przestał działać...
Oryginalny skrypt: tutaj

Warunki sprawdzają się poprawnie, komunikaty pokazują się kiedy trzeba, ale gdy rzekomo dochodzi już do tego że obraz ma być przesłany na konto ftp, komunikat o poprawnym wysłaniu pliku na serwer się wyświetla się, ale obrazku brak na serwerze brak. Wcześniej działało. Chmody mam ustawione na 777 dla całego katalogu.

Aktualizuję wątek.

Co do powyższego błędu.. cóż, błędu żadnego nie było. Pliki które wysyłałem pojawiły się na FTP dopiero po dłuższym czasie. Ktoś mógłby przypuścić przyczynę?

Powracam do prośby: skalowanie obrazka do maksymalnych rozmiarow podanych w danych, oraz kopia obrazu (miniaturka) o jakiś mniejszych rozmiarach.

Ten post edytował Mephis 22.12.2012, 13:03:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
daniel1302
post
Post #2





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Może przyda ci się moja funkcja do skalowania obrazka(wystarczy delikatnie zmodyfikować)
  1. public function imageResize($path, $width, $height)
  2. {
  3. $extension = $this-> getExtension($path);
  4. list($oldWidth, $oldHeight) = getimagesize($path);
  5.  
  6. //Sprawdź czy szerokośc i wysokosc jest procentowa(przekazane mniejsze od 0)
  7. $width = ($width < 1) ? $oldWidth * $width : $width;
  8. $height = ($height < 1) ? $oldHeight * $height : $height;
  9.  
  10. $newImage = imagecreatetruecolor($width, $height);
  11. $tmpImage = $this -> imageHeaders[$extension]['f']($path);
  12. imagecopyresampled($newImage, $tmpImage, 0, 0, 0, 0, $width, $height, $oldWidth, $oldHeight);
  13.  
  14. //Zapisz obrazek
  15. $this -> imageHeaders[$extension]['fs']($newImage, $path);
  16. }


A cała klasa odpowiedzialna za obrazki:
  1. <?php
  2. /**
  3.  *Autor: daniel1302(daniel.1302@gmail.com)
  4.  *Zakaz usuwania tego komentarza
  5.  *Licencja: BSD License
  6.  */
  7. class Files
  8. {
  9. /**
  10. *Katalog na którym klasa pracuje
  11. */
  12. private $dir;
  13.  
  14. /**
  15. *Tablica z rozszerzeniami jakie klasa obsługuje
  16. */
  17. private $extensions = array(
  18. 'jpg',
  19. 'jpeg',
  20. 'gif',
  21. 'png',
  22. );
  23.  
  24. /**
  25. *Katalogi znajdujące się w aktualnym
  26. */
  27. private $dirs = array();
  28. /**
  29. *Tablica z headerami do obrazków
  30. */
  31. private $imageHeaders = array(
  32. 'jpeg' => array(
  33. 'h' => 'image/jpeg', //Kontent obrazka
  34. 'f' => 'imagecreatefromjpeg', //Funkcja otwierająca obrazek
  35. 'fs' => 'imagejpeg' //Funkcja zapisująca obrazek
  36. ),
  37. 'jpg' => array(
  38. 'h' => 'image/jpeg',
  39. 'f' => 'imagecreatefromjpeg',
  40. 'fs' => 'imagejpeg'
  41. ),
  42. 'gif' => array(
  43. 'h' => 'image/gif',
  44. 'f' => 'imagecreatefromgif',
  45. 'fs' => 'imagegif'
  46. ),
  47. 'png' => array(
  48. 'h' => 'image/png',
  49. 'f' => 'imagecreatefrompng',
  50. 'fs' => 'imagepng'
  51. ),
  52. );
  53.  
  54. public function __construct(array $extensions=null)
  55. {
  56. if (isset($extensions))
  57. $this -> extensions = $extensions;
  58. }
  59.  
  60. /**
  61. *Sprawdza czy można korzystać z takiego rozszezenia i zwraca wartość bool
  62. */
  63. private function extensionIsAvailable($ext)
  64. {
  65. if (false !== array_search(strtolower($ext), $this -> extensions))
  66. return true;
  67.  
  68. return false;
  69. }
  70.  
  71. /**
  72. *Zwróć liste folderów jakie znajdują się w aktualnym
  73. */
  74. public function getDirs()
  75. {
  76. return $this -> dirs;
  77. }
  78.  
  79. /**
  80. *Usuwa wybrane przez nas pliki
  81. */
  82. public function delete($file)
  83. {
  84. $deleted = 0;
  85. if (is_array($file))
  86. foreach($file as $fileName)
  87. {
  88. $extension = $this -> getExtension($fileName);
  89.  
  90. if (true === $this -> extensionIsAvailable($extension) && file_exists($this -> dir.$fileName))
  91. {
  92. $deleted++;
  93. unlink($this -> dir.$fileName);
  94. }
  95. }
  96. else
  97. {
  98. $extension = $this -> getExtension($file);
  99.  
  100. if (true === $this -> extensionIsAvailable($extension) && file_exists($this -> dir.$file))
  101. {
  102. $deleted++;
  103. unlink($this -> dir.$file);
  104. }
  105. }
  106.  
  107. return $deleted;
  108. }
  109.  
  110. /**
  111. *Skanuj katalog i zwróć tablicę z wszystkimi plikami
  112. */
  113. public function scanDir($dir=null)
  114. {
  115. if (!isset($dir) && !isset($this -> dir))
  116. throw new FilesException('Nie podałeś katalogu który chcesz skanować!');
  117.  
  118. if (isset($dir))
  119. $this -> setDir($dir);
  120.  
  121. $handle = openDir($this -> dir);
  122.  
  123. $files = array();
  124.  
  125. while(false !== ($fileName = readdir($handle)))
  126. {
  127. $extension = explode('.', $fileName);
  128. $extension = end($extension);
  129.  
  130. if (true === $this -> extensionIsAvailable($extension))
  131. {
  132. $files[] = $fileName;
  133. }
  134.  
  135. if(is_dir($this -> dir.$fileName) && $fileName != '.' && $fileName != '..')
  136. {
  137. $this -> dirs[] = $fileName;
  138. }
  139. }
  140.  
  141. return $files;
  142. }
  143.  
  144. /**
  145. *Wysyła plik do odpowiedniego katalogu($this -> dir)
  146. *
  147. *Dodatkowe opcje:
  148. *['max_size']- Maksymalny rozmiar pliku w kb
  149. *['name']-Nowa nazwa, jeśli ma być zmieniona
  150. *Jeśli plik jest obrazkiem
  151. *['width']- Szerokośc jaka ma być nadana obrazkowi
  152. *['height']- Szerokośc jaka ma być nadana obrazkowi
  153. *
  154. *Zwraca nazwe pliku, jeśli zostanie poprawnie wysłany
  155. */
  156. public function upload($file, array $options=null)
  157. {
  158. if (!isset($this -> dir))
  159. throw new ImagesException('Nie podanko katalogu na którym mają być wykonywane działania');
  160.  
  161. $size = round($file['size']/1024);
  162.  
  163. $extension = $this-> getExtension($file['name']);
  164.  
  165. if (false === $this -> extensionIsAvailable($extension))
  166. throw new FilesException('Nie można uploadować pliku o takim rozszeżeniu!');
  167.  
  168. //Sprawdź czy zarządano zmiany nazwy
  169. if (isset($options['name']))
  170. $newName = $options['name'].'.'.$extension;
  171. else
  172. $newName = $file['name'];
  173.  
  174. $newPath = $this->dir.$newName;
  175.  
  176. //Sprawdź maksymalny rozmiar
  177. if (isset($options['max_size']) && $size > $options['max_size'])
  178. throw new FilesException('Rozmiar uploadowanego pliku jest za wielki! Maksymalny rozmiar pliku jaki można wysłać to: '.$options['max_size'].' kb a ty próbowałeś wysłać plik o wadze '.$size.' kb');
  179.  
  180. if (false === move_uploaded_file($file['tmp_name'], $newPath))
  181. throw new FilesException('Plik nie został przkeazany przez odpowiedni formularz!');
  182. else
  183. {
  184. //Jeśli plik jest obrazkiem zmień mu rozmiary
  185. if (isset($this -> imageHeaders[$extension]))
  186. {
  187. if (isset($options['width']))
  188. $width = $options['width'];
  189. if (isset($options['height']))
  190. $height = $options['height'];
  191.  
  192. //Jeśli który kolwiek rozmiar istnieje to wykoanaj zmianę rozmiarów
  193. if (isset($width) || isset($height))
  194. {
  195. $this -> imageResize($newPath, $width, $height);
  196. }
  197. }
  198. }
  199.  
  200. return $newName;
  201. }
  202.  
  203. /**
  204. *Zwróci rozrszezenie pliku
  205. */
  206. public function getExtension($path)
  207. {
  208. $extension = explode('.', $path);
  209. return end($extension);
  210. }
  211.  
  212. /**
  213. *Zmień rozmiar obrazka
  214. */
  215. public function imageResize($path, $width, $height)
  216. {
  217. $extension = $this-> getExtension($path);
  218. list($oldWidth, $oldHeight) = getimagesize($path);
  219.  
  220. //Sprawdź czy szerokośc i wysokosc jest procentowa(przekazane mniejsze od 0)
  221. $width = ($width < 1) ? $oldWidth * $width : $width;
  222. $height = ($height < 1) ? $oldHeight * $height : $height;
  223.  
  224. $newImage = imagecreatetruecolor($width, $height);
  225. $tmpImage = $this -> imageHeaders[$extension]['f']($path);
  226. imagecopyresampled($newImage, $tmpImage, 0, 0, 0, 0, $width, $height, $oldWidth, $oldHeight);
  227.  
  228. //Zapisz obrazek
  229. $this -> imageHeaders[$extension]['fs']($newImage, $path);
  230. }
  231.  
  232. /**
  233. *Ustaw katalog na jakim będziemy pracowali
  234. */
  235. public function setDir($dir)
  236. {
  237. if (is_dir($dir))
  238. $this -> dir = $dir;
  239. else
  240. throw new FilesException('Katalog który próbujesz przeszukać jest nie poprawny lub nie istnieje!');
  241.  
  242. return $this -> dir;
  243. }
  244. }
  245.  
  246. class FilesException extends Exception {}


Ten post edytował daniel1302 23.12.2012, 16:08:11
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: 14.10.2025 - 01:42