Graphix, Prosta klasa GD |
Graphix, Prosta klasa GD |
25.03.2011, 20:29:18
Post
#1
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 6 Dołączył: 21.11.2010 Ostrzeżenie: (0%) |
Witajcie forumowicze!
Chciałbym wam przedstawić moją prostą i zarazem nieskomplikowaną klasą Graphix którą napisałem z nudów (jak i w celach edukacyjnych). a postanowiłem wystawić na łamach forum bo uznałem że komuś może się przydać. Ponadto czyni kod (wg. mnie) czytelniejszym i ładniejszym pomijając to że część funkcji to wrappery . Oto taki przykładowy kod:
Download: Repozytorium na GitHub'ie Dokumentacja: Dokumentacja To chyba wszystko. A co do kodu to dla niektórych kod może być gorszy od podstawowego (GD) ale to zależy wyłącznie od własnych upodobań. Proszę o komentarze i wasze opinie. Ten post edytował Szadow 26.03.2011, 12:35:44 -------------------- Pomogłem? Kliknij przycisk Pomógł. ;)
|
|
|
25.03.2011, 20:46:26
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
Cały projekt został profesjonalnie przygotowany i całość ogólnie wygląda dobrze. Wydajności, ani jakości nie sprawdzałem, ale wierzę, że powinno być ok. Mam kilka luźnych uwag, to co wpadło na szybko:
1) Graphix.class.php: public function load($path) { if(is_readable($path)) { $ext = explode('.', basename($path)); $ext = $ext[count($ext) - 1]; zawsze się tego czepiam, ale czy nie lepiej użyć przeznaczonej do tego funkcji pathinfo? $tmp = pathinfo($path); $ext = strtolower($tmp['ext']); i to samo metoda save oraz pewnie jeszcze inne metody, w których nie zauważyłem tego kodu. A właśnie tak poza tym to aż się prosi przenieść te dwie linijki, które kilka razy powtarzasz w kilku metodach do osobnej metody np. protected _getExtension($path) ? 2) Czy wiesz, że lepiej używać imagecopyresampled zamiast imagecopyresized? (znacznie lepsza jakość) 3) phpDoc umożliwia też zamieszczanie informacji o autorze (@author) oraz @package @subpackage etc. 4) brakuje mi tu gotowego interfejsu do późniejszej ewentualnej adaptacji dla jakiegoś frameworka. 5) mało efektów udostępniasz, brakuje mi odbicia lustrzanego, falowania, sepii, czerń-biel, odwrócenia barw i innych podstawowych funkcjonalności, ale przede wszystkim brak możliwości nałożenia znaku wodnego Podsumowując: Kawał dobrej roboty, kod dobrze udokumentowany, ale póki co mało funkcjonalny. Nie ma tutaj niczego, co jest niedostępne u konkurencji - zobacz no, sekcję "Learn how" na stronie http://phpthumb.gxdlabs.com/ Rozważyłbym też możliwość współpracy poprzez api z pakietem ImageMagick. Ten post edytował darko 25.03.2011, 20:51:05 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
26.03.2011, 12:44:29
Post
#3
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 6 Dołączył: 21.11.2010 Ostrzeżenie: (0%) |
Ad 1. Dzięki, zapomniałem o tej funkcji a kod teraz wygląda ładniej
Ad 2. I tu też miałeś rację po zmianie obraz wygląda znacznie lepiej. Ad 3. Autorów mam w jednym pliku, bo jak by ktoś ewentualnie dołączył to musiał bym to zmienić w każdym pliku. Ad 5. Chciałbym zaznaczyć iż jest to wersja beta, obecnie pracuje nad poprawkami ale wkrótce pojawią się niektóre efekty Co do API to rozważę te myśl a póki co dodałem wersję 0.2.1b w której pozmieniałem rzeczy wg. twoich wskazówek i parę innych rzeczy. Oraz dzięki za twój jakże pomocny komentarz. EDIT: Dodałem link do pobrania dokumentacji. Ten post edytował Szadow 26.03.2011, 12:45:05 -------------------- Pomogłem? Kliknij przycisk Pomógł. ;)
|
|
|
26.03.2011, 15:07:33
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
Nie można na githuba wrzucić dokumentacji? Jeśli zamierzasz rozwijać ten projekt do jakiś poważniejszych rozmiarów rozważ zastosowanie wiki Powodzenia w dalszych pracach, pewnie kiedyś skorzystam ze stabilnej wersji Twojego softu.
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
26.03.2011, 15:38:35
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Mniej lub bardziej poważne błędy:
1. Wykorzystywanie globalnej przestrzeni nazw. 2. Nieprzestrzeganie konwencji nazewnictwa PSR-0. 3. Śmieci typu require_once - przecież istnieją autoloadery. 4. Przykłady wykorzystania (folder examples) w źródłach projektu? 5. Poleganie na rozszerzeniu w nazwie pliku do detekcji typu pliku. 6. Opieranie się wyłącznie na GD - praktycznie skazanie projektu na śmierć. 7. Wyjątek FileExistsException (czyt: plik istnieje) wyrzucany w momencie gdy plik nie istnieje? Ciekawe. 8. Metody rysujące po obrazie powinny być raczej wyrzucone poza obiekt zamujący się przechowywaniem samego obrazu. Dodawanie własnych rozszerzeń musi być okropne. 9. Kod jest podatny na wiele błędów jak chociażby pobieranie nieistniejącego koloru czy rysowanie po punktach, które nawet nie należą do obrazu. 10. Żaden z Twoich wyjątków nie powinien dziedziczyć bezpośrednio po klasie Exception, bo żaden z nich nie jest aż tak ogólny. 11. Brak absolutnego minimum jeżeli chodzi o dostępne funkcje. Wybacz ale jeżeli nie mogę nawet w jakiś normalny sposób przesunąć punktu o dany wektor, to po cholerę mi takie obiekty, które robią jedynie za kontenery na dane? Ogólnie to raczej nie warte pokazywania na chwilę obecną. Nic poza źle zaprojektowanym i niewygodnym obiektowym wrapperem na GD. |
|
|
3.04.2011, 13:35:48
Post
#6
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 6 Dołączył: 21.11.2010 Ostrzeżenie: (0%) |
Ad 1. Namespaców na razie nie planuje - mam zamiar to trzymać przez jakiś czas (jeśli nie na zawsze) na 5.2.0
Ad 2. Poprawione (w jakimś stopniu) ale i tak będzie trzeba to poprawić Ad 3. Racja, dodane Ad 4. To jest GitHub, gdzie ja to mam dać? Ad 5. Do poprawy Ad 6. Z góry projekt miał być TYLKO i wyłącznie na GD ale zastanawiam się nad jego rozszerzeniem o ImageMagick czy też GMagik. Ad 7. Wyjątki poprawione (zresztą wcześniej) Ad 8. Nad tym pracuje Ad 9. Po co komu rysowanie po nie istniejących punktach? Rysuje tam gdzie chce. Ad 10. Patrz punkt 7 Wybacz ale po co dawać super napakowany projekt skoro jeśli ktoś inny zobaczy błąd jakiego ja nie wiedziałem być może będzie trzeba wszystko przepisać. A tak to zmieniam w trakcie rozszerzania i wg. mnie publikacja wersji beta nie była za wczesna. Ponad to dodałem parę poprawek (większych czy mniejszych). Nie ukrywam też że jeszcze dużo zostało do zrobienia... Ten post edytował Szadow 3.04.2011, 16:23:29 -------------------- Pomogłem? Kliknij przycisk Pomógł. ;)
|
|
|
3.04.2011, 15:13:30
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
1. Strzał w stopę. Wszystkie nowe projekty opierają się o 5.3. Zresztą jest to na chwilę obecną chyba jedyna rozwijana gałąź.
4. Daj osobno źródła (folder src) i osobno dokumentację z przykładami (folder docs). 9. Po nic. Ale jeżeli się gdzieś walnę i będę próbować robić jakieś dziwne rzeczy to dobrze jest dostać od razu informację o tym, że coś spieprzyłem. To ułatwia pracę. Ja nie piszę tutaj o jakiś nie wiadomo jak rozbudowanych bibliotekach, a o absolutnym minimum. Na co mi jakieś narzędzie które jedynie mnie ograniczy i utrudni pracę? Tworzenie / przetwarzanie grafiki samo w sobie jest bardzo obszernym zagadnieniem, więc i biblioteki ułatwiające prace z tym muszą być nieco obszerne by zapewnić chociażby minimalne wsparcie. PS. Betę to się wypuszcza jak projekt ma ręce i nogi, da się go już nawet używać i gdy wprowadzone zmiany będą raczej kosmetyczne. PS2. "może" i "wg (bez kropki)". |
|
|
Wersja Lo-Fi | Aktualny czas: 25.09.2024 - 11:06 |