Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> toelPHP - przekształcanie obrazów, gotowe rozwiązanie
toel
post
Post #1





Grupa: Zarejestrowani
Postów: 97
Pomógł: 11
Dołączył: 2.02.2010

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


Witam!

Ostatnio z przypływu weny stworzyłem sobie własną klasę do przetwarzania obrazów (przede wszystkim chciałem móc szybko tworzyć miniatury) i postanowiłem ją upublicznić.

Dlatego też podaję link

http://pawelmichalski.pl/toelphp/

i proszę o konstruktywną krytykę oraz jakieś uwagi co powinno i mogło się znaleźć w kolejnych wersjach (jeśli takowe powstaną).


P.S. Wiem, że istnieją inne gotowe rozwiązania, ale tak jak mówiłem...przypływ weny winksmiley.jpg

P.S.2. Jeśli ktoś już będzie oceniał to był bym wdzięczny od razu za prostą ocenkę layoutu strony projektu winksmiley.jpg

Pozdrawiam,
Paweł
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
emp
post
Post #2





Grupa: Zarejestrowani
Postów: 195
Pomógł: 14
Dołączył: 12.01.2006
Skąd: Gotham City

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


Pod IE6 strona się pruje i flash nie zawiera żadnej treści.

Powinieneś do klasy dodać możliwość generowania efektu cienia i zrobić dokumentacje po polsku.


--------------------
Temat zamykam i przenoszę do Bangladeszu.
To jest wiadomość śmierci jeśli ją czytasz to znaczy że pozostało ci 30 sekund życia, więc lepiej zacznij się modlić.
Go to the top of the page
+Quote Post
darko
post
Post #3





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


To daj jeszcze otwartą licencję i guitar.gif
Zastrzeżenia/wątpliwości:
1. pomieszane nazewnictwo polski i angielskie ($rozszerzenie)
2. brak komentarzy-dokumentacji phpDoc
3. czy Ty kochasz static ? - po co sobie tak utrudniać życie ?
4. nie piszesz nic o typach rozszerzeń obsługiwanych obrazków (jpg, png, gif)
5. komunikat o treści: No - server doesn\'t support technology used in this library <--- mi nic nie mówi, lepiej byłoby wypluć, że serwer nie obsługuje rozszerzenia GD
6. brakuje mi możliwości zmiany czcionki dla znaku wodnego (domyślnie jest Verdana)
7. nie znalazłem także możliwości zapisywania utworzonych miniatur na serwerze (ale pewnie gdzieś jest)
8. zamiast tego - swoją drogą fajnego ascii arta dałbyś komentarz phpDoc z: opisem klasy, autorstwem, wersją, wymaganiami, licencją etc.

Podsumowując:
ogólnie kawał dobrej roboty, kontynuuj prace i aktualizuj swój projekt, myślę, że wielu ludziom może przydać się taka podręczna niewielkich rozmiarów klasa do tworzenia miniatur.

ps. layoutu strony nie ocenię, bo na grafice się nie znam i niech tak zostanie smile.gif


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
toel
post
Post #4





Grupa: Zarejestrowani
Postów: 97
Pomógł: 11
Dołączył: 2.02.2010

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


Cytat(emp @ 4.02.2010, 03:48:04 ) *
Pod IE6 strona się pruje i flash nie zawiera żadnej treści.

Powinieneś do klasy dodać możliwość generowania efektu cienia i zrobić dokumentacje po polsku.



Och...czy na prawdę dalej musimy wspierać IE6 - już nawet Google się go ma wyprzeć ze swoimi aplikacjami winksmiley.jpg

Nad rozwiązaniem cienia pomyślę, bo faktycznie może się przydać.

Dokumentacji PL w swoim czasie na pewno powstanie, tylko najpierw chciałem wystartować do szerszego grona (w razie gdyby ktoś spoza PL się na moją klasę naciął winksmiley.jpg


Cytat(darko @ 4.02.2010, 04:49:34 ) *
To daj jeszcze otwartą licencję i guitar.gif
Zastrzeżenia/wątpliwości:
1. pomieszane nazewnictwo polski i angielskie ($rozszerzenie)
2. brak komentarzy-dokumentacji phpDoc
3. czy Ty kochasz static ? - po co sobie tak utrudniać życie ?
4. nie piszesz nic o typach rozszerzeń obsługiwanych obrazków (jpg, png, gif)
5. komunikat o treści: No - server doesn\'t support technology used in this library <--- mi nic nie mówi, lepiej byłoby wypluć, że serwer nie obsługuje rozszerzenia GD
6. brakuje mi możliwości zmiany czcionki dla znaku wodnego (domyślnie jest Verdana)
7. nie znalazłem także możliwości zapisywania utworzonych miniatur na serwerze (ale pewnie gdzieś jest)
8. zamiast tego - swoją drogą fajnego ascii arta dałbyś komentarz phpDoc z: opisem klasy, autorstwem, wersją, wymaganiami, licencją etc.

Podsumowując:
ogólnie kawał dobrej roboty, kontynuuj prace i aktualizuj swój projekt, myślę, że wielu ludziom może przydać się taka podręczna niewielkich rozmiarów klasa do tworzenia miniatur.

ps. layoutu strony nie ocenię, bo na grafice się nie znam i niech tak zostanie smile.gif


Fakt - licencja nie jest wspomniana, ale w założeniach jest "bierzcie i róbta co chceta" ;]

2. Były, ale się zmyły - ograniczyłem się do dokumentacji poza klasą (chociaż fakt, teraz widzę, że nie zawiera wszystkich informacji)
3. static jest tylko na użytek singletona
6. Dowolny Truetype font. Wrzucasz plik, w parametrach funkcji podajesz nazwę ze ścieżką i proszę bardzo smile.gif
7. funkcja EndCreate jako drugi parametr przyjmuje nazwę pliku (z rozszerzeniem i może być ze ścieżką) - oczywiście jeśli zapisze na serwer to już nie wyświetla AdHoc
8. goto 2; winksmiley.jpg Ale ok... przy następnej wersji postaram się z powrotem dodać
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


  1. Kod
    private static $image,$typ,$rozszerzenie,$img,$quality,$transparent,$mini,$r,$g,$b;
    Tam jakieś polskie wstawki pominę, ale cały skrypt mimo iż nie sam w sobie jakoś specjalnie rozbudowany przez powyższe stracił w ogóle jakikolwiek sens użytkowania. Nie mogę tworzyć/modyfikować dwóch obrazów równolegle...
  2. Nie za bardzo wiem po co zaimplementowałeś tam wadliwego singletona? - wadliwego bo nie zablokowałeś możliwości sklonowania obiektu.
    toelPHP::CanIUseThisLib() jest kompletnie bezużyteczna. Zamiast wyświetlać jakiś napis niech zwróci proste true/false (ew. wyrzuci wyjątek)
  3. Bardzo dziwne nazewnictwo: startCreate, endCreate?
  4. Dokumentacji nie czytałem, ale w kodzie widzę, że kolor podaje się jako... tekst: "215.4.154"? Przecież to będzie straszne w użyciu. Wymuś tam podanie tablicy (array(215, 4, 154)), obiektu (new Color(215, 4, 154)) czy chociażby trzech oddzielnych parametrów. Nie będziesz się wtedy też musiał bawić w jakąś "dekodowanie" koloru z postaci heksadecymalnej itp. - zawsze można podać: array(52, 0xFF, 075).
  5. Mogłeś oddzielić Twojego toelPHP-a (nie wiem czy tak to powinienem odmieniać) od GD. Dzięki dodatkowej warstwie abstrakcji mógłbyś łatwo utworzyć sterownik dla GD, ImageMagick itp.
  6. Do pobrania rozszerzenia z nazwy pliku służy pathinfo - nie ma sensu bawić się w jakieś end(explode...))
  7. Włącz sobie raportowanie błędów na E_ALL winksmiley.jpg
  8. Na kod samych "efektów" nie patrzę, ale IMO lepiej jakbyś wydzielił je od samego "głównego obiektu". Przedrostki "Effect" to średni pomysł. Lepiej zrobić coś w stylu:
    1. $toelObj->effect('rotate', array(90))->effect('colorize', array(255, 220, 50))
Go to the top of the page
+Quote Post
toel
post
Post #6





Grupa: Zarejestrowani
Postów: 97
Pomógł: 11
Dołączył: 2.02.2010

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


Cytat(Crozin @ 4.02.2010, 13:10:01 ) *
  1. Kod
    private static $image,$typ,$rozszerzenie,$img,$quality,$transparent,$mini,$r,$g,$b;
    Tam jakieś polskie wstawki pominę, ale cały skrypt mimo iż nie sam w sobie jakoś specjalnie rozbudowany przez powyższe stracił w ogóle jakikolwiek sens użytkowania. Nie mogę tworzyć/modyfikować dwóch obrazów równolegle...
  2. Nie za bardzo wiem po co zaimplementowałeś tam wadliwego singletona? - wadliwego bo nie zablokowałeś możliwości sklonowania obiektu.
    toelPHP::CanIUseThisLib() jest kompletnie bezużyteczna. Zamiast wyświetlać jakiś napis niech zwróci proste true/false (ew. wyrzuci wyjątek)
  3. Bardzo dziwne nazewnictwo: startCreate, endCreate?
  4. Dokumentacji nie czytałem, ale w kodzie widzę, że kolor podaje się jako... tekst: "215.4.154"? Przecież to będzie straszne w użyciu. Wymuś tam podanie tablicy (array(215, 4, 154)), obiektu (new Color(215, 4, 154)) czy chociażby trzech oddzielnych parametrów. Nie będziesz się wtedy też musiał bawić w jakąś "dekodowanie" koloru z postaci heksadecymalnej itp. - zawsze można podać: array(52, 0xFF, 075).
  5. Mogłeś oddzielić Twojego toelPHP-a (nie wiem czy tak to powinienem odmieniać) od GD. Dzięki dodatkowej warstwie abstrakcji mógłbyś łatwo utworzyć sterownik dla GD, ImageMagick itp.
  6. Do pobrania rozszerzenia z nazwy pliku służy pathinfo - nie ma sensu bawić się w jakieś end(explode...))
  7. Włącz sobie raportowanie błędów na E_ALL winksmiley.jpg
  8. Na kod samych "efektów" nie patrzę, ale IMO lepiej jakbyś wydzielił je od samego "głównego obiektu". Przedrostki "Effect" to średni pomysł. Lepiej zrobić coś w stylu:
    1. $toelObj->effect('rotate', array(90))->effect('colorize', array(255, 220, 50))



Co do 1 to faktycznie - nie wiem jak to przegapiłem i oczywiście jest przez static pozbawione sensu...
2. hmm...czemu wadliwy ? Tworzy tylko jeden obiekt i nawet jeśli ponownie wywołasz to nie stworzy obiektu tylko zwróci już istniejący. A konstruktor jest prywatny więc przez niego obiektu nie utworzysz. Tak więc uświadom mnie, bo chyba przegapiam jego wadliwość smile.gif

Pozostałe informacje "przyjmuję na klatę" i postaram się je w jakiś sposób uwzględnić przy poprawkach smile.gif
Go to the top of the page
+Quote Post
wookieb
post
Post #7





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Tak ale właśnie przez singletona uniemożliwiasz ŁATWĄ prace na wielu zdjęciach. Dodatkowo poszedłeś w taką niezbyt dobra praktykę jak większość klas, a mianowicie umieszczania wszystkich metod w klasie. Jest to bez celowe z tego między innymi względu, że jeżeli chcesz dodać nowy filtr musisz ingerować w kod klasy (a nie powinno się). Lepiej umieścić opcje transformowania zdjęcia w oddzielnym katalogu.


--------------------
Go to the top of the page
+Quote Post
toel
post
Post #8





Grupa: Zarejestrowani
Postów: 97
Pomógł: 11
Dołączył: 2.02.2010

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


Cytat(wookieb @ 4.02.2010, 14:43:00 ) *
Tak ale właśnie przez singletona uniemożliwiasz ŁATWĄ prace na wielu zdjęciach.[...]



Tzn. chciałbyś przetwarzać wiele zdjęć równolegle, czy w jednym wywołaniu ? Bo jeśli chodzi o to drugie, to własnie temu służy startCreate i EndCreate, które pozwalają wykonać operacje dla wielu obrazków na tym jednym obiekcie...

No chyba, że chodzi o to pierwsze - bo fakt...jeśli byś chciał "otworzyć" nowe przekształcanie i przed jego zakończeniem dla danego obrazu, uruchomić nowe, to się nie da...


----------------



{a w ogóle to własnie o to chodziło - dzięki za wszelkie wskazówki i krytykę smile.gif }

Ten post edytował toel 4.02.2010, 15:26:21
Go to the top of the page
+Quote Post
Crozin
post
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
2. hmm...czemu wadliwy ? Tworzy tylko jeden obiekt i nawet jeśli ponownie wywołasz to nie stworzy obiektu tylko zwróci już istniejący. A konstruktor jest prywatny więc przez niego obiektu nie utworzysz. Tak więc uświadom mnie, bo chyba przegapiam jego wadliwość
Taka, że nadal mam możliwość utworzenia drugiego obiektu tej klasy - popatrz na poniższy przykład:
  1. <?php
  2.  
  3. class MyAbcClass {
  4. private static $instance;
  5.  
  6. private $property;
  7.  
  8. private function __construct() {}
  9.  
  10. public function setProperty($property) {
  11. $this->property = $property;
  12. }
  13.  
  14. public function getProperty() {
  15. return $this->property;
  16. }
  17.  
  18. public function getInstance() {
  19. if (null == self::$instance) {
  20. self::$instance = new self();
  21. }
  22.  
  23. return self::$instance;
  24. }
  25. }
  26.  
  27. // $obj = new MyAbcClass(); # Fatal Error
  28.  
  29. $obj = MyAbcClass::getInstance();
  30. $obj->setProperty('test value');
  31. $obj->getProperty(); // Returns: test value
  32.  
  33. $clone = clone $obj;
  34. $clone->setProperty('another value');
  35. $clone->getProperty(); // Returns: another value
  36. $obj->getProperty(); // Returns: test value
Musiałbyś dodać jeszcze:
  1. private function __clone() {}
By poprawnie zaimplementować ten wzorzec.

Co do równlogegłości... chodzi o coś takiego:
  1. $imgA = new Toel('filepath.png');
  2. $imgB = new Toel('another/filepath.png');
  3.  
  4. if (true) {
  5. $imgA->doSth();
  6. } else {
  7. $imgB->doSthElse();
  8. }
  9.  
  10. $imgA->save();
  11. $imgB->rotate(-90)->save();
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 Aktualny czas: 20.08.2025 - 18:59