Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: toelPHP - przekształcanie obrazów
Forum PHP.pl > Inne > Oceny
toel
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ł
emp
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.
darko
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
toel
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ć
Crozin
  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))
toel
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
wookieb
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.
toel
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 }
Crozin
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();
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.