Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasa] resize, watemark
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
gebp
Witam.
Moja pierwsza klasa więc proszę o bugi i konstruktywną krytykę ( aha pisanie w PHP to dla mnie rodzaj hobby więc proszę o wyrozumiałość)

O klasie:
1. Pozwala pomniejszać obrazy
2. Pozwala nakładać znak wodny
3. Pozwala na wybór typu pliku ( *.png, *.jpg, *.bmp ) przy zapisie
4. Pozwala na zachowanie proporcji / tego mi brakowało w innych klasach/ . Zmniejsza obraz po podaniu tylko wymaganej szerokości/wysokości lub obu + zachowanie proporcji
5. Obsługuje przeźroczystość (na pewno w *.gif png - dziwny format chętnie posłucham uwag)

P.S.
Do klasy przydało by się (tak sobie myślę) więcej zabezpieczeń głupo-odpornych, ale tak się zastanawiając dalej tego rodzaju klasy są umieszczane raczej wewnątrz skryptów więc zdaje się na osoby które będą używać klasy. Ja sam wole raportowanie błędów w postaci 0 lub 1 szczególnie przy używaniu AJAX'a

Klasa Cphoto.php

Użycie:
  1. <?php
  2. $link="../photo/";
  3. $photo="img1.jpg";  // klasa akceptuje *.jpg, *,png *, *.bmp
  4.  
  5. $photo= new photo()
  6. // ustawienie ppliku źródłowego
  7. $d1=$photo->set_photo($link,$photo);
  8. echo $d1; // ewentualne błędy
  9.  
  10. // Ustwawienie rozmiarów do jakich chcemy zmniejszyć obraz źródłowy
  11. //po kolei:
  12. // miejsce zapisu np: ../photo/pomniejszone/  Ważne katalog musi istnieć
  13. // nazwa pod jaką chcemy zapisać np moje1
  14. //szerokość (x) możemy podać lub "null" jeżeli null plik zostanie zmniejszony proporcjonalnie
  15. // wysokość (y) j.w
  16. //jeżeli podamu oba parametry (x i y) to w zależności od osatniego parametru zostanie zachowana proporcja lub nie
  17. // typ pliku ( png, jpg, bmp, lub null) w przypadku wartości nuul typ pliku będzie taki sam jak plik źródłowy
  18. // 0 lub 1 zachować proporcje ( NIE / TAK) - WAŻNE nie ma znaczenie przy podanym tylko jednym argumencie x lub y
  19.  
  20. $d2=$photo->set_s("../photo/pomniejszone/'', "moje1","500","null","null","0"'); // zachowanie proporcji szerokość 500 px
  21. $d2=$photo->set_s("../photo/pomniejszone/'', "moje2","null","300","bmp","0"); // zachowanie proporcji wysokość 300 px + zapis jako bmp
  22. $d2=$photo->set_s("../photo/pomniejszone/'', "moje3","300","300","null","0"'); // zachowanie proporcji szerokość  Ważne najszersza krawędż obrazka ( x lub y) nie będzie większa niż zadeklarowana
  23. $d2=$photo->set_s("../photo/pomniejszone/'', "moje4","500","500","png","1"); // zachowanie proporcji szerokość 500 px na 500 px na sztywno + zapis jako png
  24.  
  25. echo $d2; // ewentualne błędy
  26.  
  27. //identyczna funkcja dla miniatur działa identycznie , te same arguemty
  28. $d3=$photo->set_m("../photo/miniatury/'', "miniq","100","100","png","1"); // zachowanie proporcji szerokość 100 px na 100 px na sztywno + zapis jako png
  29.  
  30. // ustawienie zanku wodnego (także po środku)
  31. // argumenty (ścieżka, plik, pozycja)
  32. $d4=$photo->set_watemark("/photo/znakwodny/","znakwodny.gif","c") // ustawienie znaku wodnego na środku dostępne (tl, tr, bl, br i c)
  33. echo $d4;  // ewentualne błędy
  34.  
  35. // zmiana rozmiaru po wcześniejszym ustawieniu
  36. // zwraca tablice array(path, file)
  37. $d5=$photo->resize("s"); // zmiana wg ustawień z set_s
  38. $d6=$photo->resize("m"); // zmiana wg ustawień z set_m
  39.  
  40. echo "<img src=".$d5[0].$d5[1]." alt=&#092;"pomniejszony\" /> <br />";
  41. echo "<img src=".$d6[0].$d7[1]." alt=\"miniatura\" /> <br />";
  42.  
  43. //Nakładanie znaku wodnego
  44. //plik źródłowy - ścieżka
  45. //plik źródłowy - nazwa z rozszeżeniem
  46. // katalog docelowy
  47. // nazwa docelowa bez rozszerzenia - plik będzie tego samego rozszerzenia co źródło
  48. // przeźroczystość - dot. wtaemark'ów  zapisanych jako jpg 0- 100% przeźroczysty ; 100 - wogólne nie przeźroczysty(0%)
  49. // zwraca tablice array(path, file)
  50. $d7=$photo->make_watemark("../watemark/","watemark1.jpg","../photo/zznakiem/","moj1zznakiem","50"); //  zapisany jako moj1zznakiem znak w 50 % przeźroczysty
  51.  
  52. echo "<img src=".$d7[0].$d7[1]." alt=\"z znakiem wodnym\" /> <br />";
  53. ?>
kwiateusz
fajniej by to wyglądało w stylu method chaining czyli $photo->setDestination('../photo/miniatury/')->setWidth(5)->setHeight(null) etc smile.gif
set_s set_m malo co mowią tak na 1szy rzut oka smile.gif

tak samo obrazek po resize moglby być zwracany jako obiekt nie tablica (ale to juz moze takie zboczenie) wtedy moznaby $d5->name etc

a tak to całkiem zgrabnie tylko nie chce mi sie na ta godzine sprawdzac dokladnie kodu smile.gif
NoiseMc
To o czym piszesz nazywa sie Fluent Interface, a realizuje sie to tak ze kazda metoda klasy zwraca $this i bardzo ciekawy jest pomysl zastosowania tego w klasie do obrobki obrazow smile.gif

Co do klasy to ... spagetti troche ...
Kiedys sobie napisalem taka prosta klase do skalowania ... looknij moze cos Ci sie z niej spodoba:
http://phpfi.com/389831
gebp
Cytat
tak samo obrazek po resize mógłby być zwracany jako obiekt nie tablica


Już tłumacze.
Klasę tą stworzyłem do obsługi ładowanych zdjęć na serwer. Załadowane zdjęcie obrabiam wg. swojego "widzi mi się". Z dlatego zwracam tablice z link+plik aby zapisać je w bazie.
Dalej. Umaiłem sobie że jeżeli komuś się spodoba jakieś zdjęcie ale będzie chciał je w innej rozdzielczości to proszę bardzo.
Czyli koncepcja wygląda mniej więcej tak:
1. Ładuje zdjęcie-orginał + zapis do bazy link + plik.
2. Stworzeni miniatury + odpowiednio mniejszego by dobrze wyglądało na stronie ( nie za duże nie za małe). Ważne (dla mnie) by zachować proporcje. Zdjęcie z cyfrówek jest standardowo w formacie 3:2 / 2:3. Miniatury znów muszą też zmieścić się w pewnej ograniczonej przestrzeni (<div> np 140px na 140 px.). No i też ważne by zachować proporcje. Widziałem kilka galerii z "goblinami" -paskudztwo.
3. Jeżeli ktoś będzie chciał zdjęcie pobrać ale w innej rozdzielczości to mam pełną konfigurację.

tak to mi się widzi.

Cytat
Co do klasy to ... spagetti troche ...

Odpowiem Tak i Tak.
1. Nie mam jeszcze biegłości w pisaniu - wogóle w pisaniu skryptów PHP ( nie pisze zawodowo) to jedno z moich hobby.
2. Klase pisałem pod siebie. po tym jak przeszukałem forum pod kontem klasy jak moja. Wynik - brak.
3. Za szybko myślę niż piszę. Pisze jedną funkcję a już myślę o drugiej.
4. W końcu pomyślałem sobie jeszcze że może by ktoś ocenił te moje wypociny. Ale sama obsługa jpg to trochę mało. No i tak klasa się trochę rozrosła. Szczerze mówiąc to moja klasa dla moich potrzeb. Jak ktoś ją wykorzysta a lepiej jeszcze jak ją poprawi by miała ręce i nogi, to naprawdę nie będę miał mu tego za złe. Chętnie poczytam jakie błędy popełniam jakie było by korzystne ich rozwiązanie. Tak dla samego siebie.
Zamierzałem że to będzie wyglądało mniej więcej tak:
Ustawić oryginał.
Ustawić parametry.
Obrobić zdjęcia.

To by było chyba na tyle.
NoiseMc
Jezeli chcesz zeby bylo ladniej to przeformatuj kod, zastosuj odpowiednie wciecia i ponazywaj zmienne jakos ladniej naPrzykladZmienna albo NazwaKlasy.
Jezeli myslisz o innej funkcji piszac jedna to moze najpierw napisz sobie interfejs klasy (gole funkcje bez kodu w srodku) a potem uzupelniaj sukcesywnie wewnatrz.
Pisz tak zeby ktos kto bedzie to po Tobie czytal robil to z przyjemnoscia smile.gif
Niby liczy sie funkcjonalnosc i to ze dziala .. ale estetyka tez jest bardzo wazna w pisaniu kodu
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.