Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [skrypt] Image Workshop
Forum PHP.pl > Inne > Oceny
CzesLaW'ek
Proszę o ocenę skryptu oraz sugestie co do ewentualnych poprawek lub rozszerzenia jego mozliwości.

Niektóre niewielkie części kodu zaczerpnąłem z funkcji którą ktoś już podawał na forum, uznałem że są dobrze przemyślane. Rozszerzyłem jednak nieco jej możliwości.

Przeznaczenie:
  • tworzenie miniatur "w locie"
  • ewentualne kadrowanie obrazów pionowych
  • obracanie obrazka o podany kąt
  • dodawanie logotypów
  • zapisywanie zmienionych obrazków
Klasa podzielona jest na metody tak, aby można było używać jedynie wybranych jej możliwości.

  1. <?php
  2.  
  3.  
  4. ########################################
  5. ##
  6. ## ImageWorkshop v1.0 b
  7. ## Written by CzesLaW
  8. ##
  9. ## E-Mail: czesio@e-clubbing.net
  10. ## Website: http://e-clubbing.net
  11. ##
  12. ########################################
  13. ##
  14. ## Jeśli masz jakieś sugestie odnośnie skryptu,
  15. ## napisz do mnie e-mail'a.
  16. ##
  17. ########################################
  18.  
  19. class obraz
  20. {
  21. /* */
  22. /* Pola */
  23. /* */
  24.  
  25. public $sciezka = '';
  26. public $sciezka_logo = '';
  27. private $wysokosc = 0;
  28. private $szerokosc = 0;
  29. private $wysokosc_logo = 0;
  30. private $szerokosc_logo = 0;
  31. private $typ_pliku = 0;
  32. private $typ_pliku_logo = 0;
  33. private $obraz = null;
  34.  
  35. /* */
  36. /* Metody */
  37. /* */
  38.  
  39. /* Tworzenie miniatury obrazu */
  40. public function utworz_miniature( $max_wysokosc = 0, $max_szerokosc = 0, $kadrowanie = 0 )
  41. {
  42. if( $this -> obraz == null )
  43. {
  44. list( $this -> szerokosc, $this -> wysokosc, $this -> typ_pliku ) = getimagesize( $this -> sciezka );
  45.  
  46. $obraz = $this -> zaladuj_plik( $this -> sciezka, $this -> typ_pliku );
  47. }
  48. else
  49. {
  50. $obraz = $this -> obraz;
  51. }
  52.  
  53. if( $obraz )
  54. {
  55. return $this -> skalowanie( $obraz, $max_szerokosc, $max_wysokosc, $kadrowanie );
  56. }
  57. else
  58. {
  59. return false;
  60. }
  61. }
  62.  
  63. /* Dodawanie logotypu */
  64. public function dodaj_logo( $sciezka_logo, $margines = 2, $przezroczystosc = 100 )
  65. {
  66. $this -> sciezka_logo = $sciezka_logo;
  67.  
  68. list( $this -> szerokosc_logo, $this -> wysokosc_logo, $this -> typ_pliku_logo ) = getimagesize( $this -> sciezka_logo );
  69.  
  70. if( $this -> obraz == null )
  71. {
  72. list( $this -> szerokosc, $this -> wysokosc, $this -> typ_pliku ) = getimagesize( $this -> sciezka );
  73.  
  74. $obraz = $this -> zaladuj_plik( $this -> sciezka, $this -> typ_pliku );
  75. }
  76. else
  77. {
  78. $obraz = $this -> obraz;
  79. }
  80.  
  81. $logo = $this -> zaladuj_plik( $this -> sciezka_logo, $this -> typ_pliku_logo );
  82.  
  83. if( $obraz && $logo )
  84. {
  85. return $this -> laczenie_plikow( $obraz, $logo, $margines, $przezroczystosc );
  86. }
  87. else
  88. {
  89. return false;
  90. }
  91. }
  92.  
  93. /* Obracanie obrazu o podany kąt */
  94. public function obroc_obraz( $stopnie = 90 )
  95. {
  96. $this -> sciezka_logo = $sciezka_logo;
  97.  
  98. if( $this -> obraz == null )
  99. {
  100. list( $this -> szerokosc, $this -> wysokosc, $this -> typ_pliku ) = getimagesize( $this -> sciezka );
  101.  
  102. $obraz = $this -> zaladuj_plik( $this -> sciezka, $this -> typ_pliku );
  103. }
  104. else
  105. {
  106. $obraz = $this -> obraz;
  107. }
  108.  
  109. if( $obraz )
  110. {
  111. $this -> obraz = imagerotate( $obraz, $stopnie, 0 );
  112.  
  113. if( in_array( $stopnie, array( 90, 270, 450, 630, 810, 990 ) ) )
  114. {
  115. $wysokosc = $this -> wysokosc;
  116. $this -> wysokosc = $this -> szerokosc;
  117. $this -> szerokosc = $wysokosc;
  118. unset( $wysokosc );
  119. }
  120.  
  121. return true;
  122. }
  123. else
  124. {
  125. return false;
  126. }
  127. }
  128.  
  129. /* Wczytywanie pliku */
  130. private function zaladuj_plik( $sciezka, $typ_pliku )
  131. {
  132. switch( $typ_pliku )
  133. {
  134. case IMAGETYPE_GIF:
  135. $obraz = imagecreatefromgif( $sciezka );
  136. break;
  137.  
  138. case IMAGETYPE_JPEG:
  139. $obraz = imagecreatefromjpeg( $sciezka );
  140. break;
  141.  
  142. case IMAGETYPE_PNG:
  143. $obraz = imagecreatefrompng( $sciezka );
  144. break;
  145.  
  146. default:
  147. return false;
  148. break;
  149. }
  150.  
  151. if ( !$obraz )
  152. {
  153. return false;
  154. }
  155. else
  156. {
  157. return $obraz;
  158. }
  159. }
  160.  
  161. /* Nakładanie logotypu na obraz */
  162. private function laczenie_plikow( $obraz, $plik_nakladany, $margines, $przezroczystosc )
  163. {
  164. $przesuniecie_x = $margines;
  165. $przesuniecie_y = $this -> wysokosc - $this -> wysokosc_logo - $margines;
  166.  
  167. imagecolortransparent( $plik_nakladany, imagecolorat( $plik_nakladany, 0, 0 ) );
  168. imagecopymerge( $obraz, $plik_nakladany, $przesuniecie_x, $przesuniecie_y, 0, 0, $this -> szerokosc_logo, $this -> wysokosc_logo, $przezroczystosc );
  169.  
  170. $this -> obraz = $obraz;
  171.  
  172. return $true;
  173. }
  174.  
  175. /* Tworzenie miniatury obrazu */
  176. private function skalowanie( $obraz, $max_szerokosc, $max_wysokosc, $kadrowanie )
  177. {
  178. if( ( $max_szerokosc > 1 && $max_wysokosc > 1 ) )
  179. {
  180. if( $this -> szerokosc > $this -> wysokosc )
  181. {
  182. $ratio = $max_szerokosc / $this -> szerokosc;
  183.  
  184. $nowa_szerokosc = $max_szerokosc;
  185. $nowa_wysokosc = $ratio * $this -> wysokosc;
  186. }
  187. else
  188. {
  189. if( !$kadrowanie )
  190. {
  191. $ratio = $max_wysokosc / $this -> wysokosc;
  192.  
  193. $nowa_szerokosc = $ratio * $this -> szerokosc;
  194. $nowa_wysokosc = $max_wysokosc;
  195. }
  196. else
  197. {
  198. $ratio = $max_wysokosc / $this -> wysokosc;
  199.  
  200. $nowa_szerokosc = $max_wysokosc;
  201. $nowa_wysokosc = $ratio * $this -> szerokosc;
  202.  
  203. $przesuniecie = $this -> wysokosc / 5;
  204. $this -> wysokosc = $this -> wysokosc - ( $this -> szerokosc / 2 );
  205. }
  206. }
  207. }
  208. else
  209. {
  210. $nowa_szerokosc = $this -> szerokosc;
  211. $nowa_wysokosc = $this -> wysokosc;
  212. }
  213.  
  214. $miniatura = imagecreatetruecolor( $nowa_szerokosc, $nowa_wysokosc );
  215.  
  216. imagecopyresampled( $miniatura, $obraz, 0, 0, 0, ( $kadrowanie ) ? $przesuniecie : 0, round( $nowa_szerokosc ), round( $nowa_wysokosc ), $this -> szerokosc, $this -> wysokosc );
  217.  
  218. imagedestroy( $obraz );
  219.  
  220. $this -> obraz = $miniatura;
  221. $this -> wysokosc = $nowa_wysokosc;
  222. $this -> szerokosc = $nowa_szerokosc;
  223.  
  224. return true;
  225. }
  226.  
  227. /* Wyświetlanie obrazu \"w locie\" */
  228. public function wyswietl_obraz( $jakosc = 100 )
  229. {
  230. if( $this -> obraz !== null )
  231. {
  232. switch( $this -> typ_pliku )
  233. {
  234. case IMAGETYPE_GIF:
  235. header( 'Content-type: image/gif' );
  236. return imagegif( $this -> obraz );
  237. break;
  238.  
  239. case IMAGETYPE_JPEG:
  240. header( 'Content-type: image/jpeg' );
  241. return imagejpeg( $this -> obraz, '', $jakosc );
  242. break;
  243.  
  244. case IMAGETYPE_PNG:
  245. header( 'Content-type: image/png' );
  246. return imagepng( $this -> obraz );
  247. break;
  248.  
  249. default:
  250. return false;
  251. break;
  252. }
  253. }
  254. else
  255. {
  256. readfile( $this -> sciezka );
  257. }
  258. }
  259.  
  260. /* Zapisywanie obrazu do pliku */
  261. public function zapisz_obraz( $sciezka = '', $jakosc = 100 )
  262. {
  263. if( !empty( $sciezka ) )
  264. {
  265. $rozszerzenie = explode( '.', $sciezka, 3 );
  266.  
  267. $sciezka = substr( $sciezka, 0, strlen( $sciezka ) - strlen( $rozszerzenie[count( $rozszerzenie )-1] ) );
  268. }
  269.  
  270. switch( $this -> typ_pliku )
  271. {
  272. case IMAGETYPE_GIF:
  273. header( 'Content-type: image/gif' );
  274. return imagegif( $this -> obraz, ( !empty( $sciezka ) )?$sciezka .'gif': $this -> sciezka );
  275. break;
  276.  
  277. case IMAGETYPE_JPEG:
  278. header( 'Content-type: image/jpeg' );
  279. return imagejpeg( $this -> obraz, ( !empty( $sciezka ) )?$sciezka .'jpg': $this -> sciezka );
  280. break;
  281.  
  282. case IMAGETYPE_PNG:
  283. header( 'Content-type: image/png' );
  284. return imagepng( $this -> obraz, ( !empty( $sciezka ) )?$sciezka .'png': $this -> sciezka );
  285. break;
  286.  
  287. default:
  288. return false;
  289. break;
  290. }
  291. }
  292. }
  293.  
  294.  
  295. ?>
dr_bonzo
Przeciez napisal do czego, wystarczy czytac.

@CzesLaW'ek: trzeba bylo wystartowac w Battle -->http://forum.php.pl/index.php?showtopic=29263&hl=battle biggrin.gif
kowal1122
ups...
sorki bylem TAK zapatrzony w skrypt że niezauważylem laugh.gif

wlaśnie hccialem robic galerie zdjęc i ten skrypt mi (mam nadzieje) bardzo pomorze. tongue.gif
CzesLaW'ek
Kurcze nie wiedziałem, że istnieje coś takiego sad.gif a chętnie bym wystartował. Skrypt zrobiłem na potrzeby strony... jeśli komuś się nudzi to niech dorobi do niego cachowanie miniatur tongue.gif
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.