Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Klasa] Filter, filtry graficzne
#luq
post
Post #1





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Chciałbym abyście ocenili klasę (właściwie taki kontener na funkcje), nad którą niedawno pracowałem. Służy ona do operacji na obrazkach za pomocą biblioteki GD.
Od razu powiem, że znam funkcję
Kod
imagefilter();

tyle, że nie podoba mi się, że operuje ona na oryginale, oraz, że trzeba mieć PHP skompilowanego razem z biblioteką GD.

Trochę duże tego więc wrzucam na wklej.org
Filter.class.php
CdFilter.class.php

przykład:
  1. <?php
  2.    require_once 'CdFilter.class.php';
  3.    
  4.    $img     = Filter::loadImg( 'gfx/image.png' );
  5.    $imgCd   = CdFilter::createFlipCd( $img, 0.56 );
  6.    
  7.    Filter::saveImg( $imgCd, 'gfx/imageCd.png' );
  8.    
  9.    imagedestroy( $img );
  10.    imagedestroy( $imgCd );
  11. ?>


Dla

Tworzy odbice:


Ten post edytował #luq 11.04.2009, 17:35:45


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
#luq
post
Post #2





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Cytat(belliash @ 11.04.2009, 20:01:38 ) *
Nie podoba mi sie to ze nie wszedzie uzywasz slow kluczowych public, protected i private... - brzydki nawyk albo niedopatrzenie winksmiley.jpg

No bez przesady, tyko przy jednej metodzie nie ma public winksmiley.jpg Oczywiście niedopatrzenie.

Cytat
Dwa... korzystasz z biblioteki GD ale nigdzie nie sprawdzasz czy jest dostepna, co w chwili gdy ktos mniej doswiadczony bedzie chcial skorzystac z klas moze zakonczyc sie bledem i zdziwieniem winksmiley.jpg


Słuszna uwaga smile.gif Tyle, że na razie tylko ja korzystam z niej, ale oczywiście nie widzę przeszkód żeby dopisać.


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
#luq
post
Post #3





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Cytat
Nie chce abys odbieral tego jako atak, etc... Choc ostatnimi czasy dziwnie sie spieramy na forum winksmiley.jpg

Ja takie spory odbieram raczej jako rodzaj współzawodnictwa ;p Dobrze robią czasami takie małe kłótnie :] ale jednak nam obu, ich nie życzę


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
na uwaga Tyle, że na razie tylko ja korzystam z niej, ale oczywiście nie widzę przeszkód żeby dopisać.

Zrobiłbym tak, aby sprawdzało, czy jest dostępne ImageMagick - jeśli nie, to dopiero wtedy korzysta z GD.

Poza tym, wszystko na metodach statycznych... A czemu nie możesz zrobić tak, jak np. w niektórych ORM-ach jest robione, tzn:
  1. <?php
  2. $img = new ImageFilter('plik.jpg');
  3. // albo
  4. $img = ImageFilter::factory('plik.jpg');
  5.  
  6. // i potem
  7. $img->filter(12);
  8. $img->saveTo('newFile.jpg');
  9.  
  10. //
  11. $img->sendToBrowser();
  12. $img->close();
  13. // albo w destruktorze
  14. ?>


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
#luq
post
Post #5





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Cytat(erix @ 11.04.2009, 20:47:47 ) *
Zrobiłbym tak, aby sprawdzało, czy jest dostępne ImageMagick - jeśli nie, to dopiero wtedy korzysta z GD.

Nigdy nie korzystałem, mówisz, że lepsze?

Cytat(erix @ 11.04.2009, 20:47:47 ) *
Poza tym, wszystko na metodach statycznych... A czemu nie możesz zrobić tak, jak np. w niektórych ORM-ach jest robione, tzn:


Myślałem nad tym, ale jeśli będę chciał, dla jednego obrazka stworzyć 2 (lub więcej), np miniaturkę oraz odbicie takie jak w przykładzie, a taka konieczność przy jakichś serwisach graficznych jest wielce prawdopodobna, musiałbym tworzyć 2 obiekty z tym samym obrazkiem początkowym, w mojej wersji nie muszę.
Może i myślenie trochę chore, bo rzeczywiście obrazek idealnie się nadaję na obiekt, i płyną z tego wielkie korzyści (nie trzeba liczyć co każdy filtr szerokości i wysokości itd.)
Pewnie masz rację...


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Nigdy nie korzystałem, mówisz, że lepsze?

Mniej zasobów zżera. Poza tym, duuuużo większe możliwości.

Cytat
Myślałem nad tym, ale jeśli będę chciał, dla jednego obrazka stworzyć 2 (lub więcej), np miniaturkę oraz odbicie takie jak w przykładzie, a taka konieczność przy jakichś serwisach graficznych jest wielce prawdopodobna, musiałbym tworzyć 2 obiekty z tym samym obrazkiem początkowym, w mojej wersji nie muszę.

Nie. winksmiley.jpg To byłoby nawet wydajniejsze:
  1. <?php
  2. $im = new ImageFilter('zrodlo');
  3. $im->resize(640,480);   // zasob zajmuje juz odpowiednio mniejsza pamiec
  4. $im->save('thumbMid');
  5.  
  6. $im->resize(160,120)   // i jeszcze mniej
  7. $im->save('thumbSmall');
  8.  
  9. $im->close();
  10. ?>


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
#luq
post
Post #7





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Cytat
@luq: o to chodzi, prawda?

Dokładnie smile.gif

Chodziło mi o:
  1. <?php
  2. $img   = Filter::loadImg( 'image.jpg' );
  3.    $small = Filter::resize( $img, 640, 480 );
  4.    $flip    = Filter::verticalFlip( $img );
  5. ?>

Z oryginału chce mieć odbicie, oraz z oryginału chce mieć miniaturkę. Jeśli miałbym każdy obrazek jako obiekt, musiałbym stworzyć 2 obiekty, inaczej miałbym co najwyżej miniaturkę obróconego oryginału winksmiley.jpg

belliash, chodzi Ci o to, że:
Kod
$img->restore();

miałoby przywracać obrazek stworzony w poprzednim kroku, takie cofnięcie zmian jak w Wordzie np?
Nie opłacalne, trzeba by kontrolować wszystkie zmiany, czyli potrzeba by tablicy obrazków tworzonych w każdym kroku. Za dużo pamięci pójdzie.

Ten post edytował #luq 11.04.2009, 20:49:37


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A po co drugi raz new" title="Zobacz w manualu PHP" target="_manual? Przecież jest clone" title="Zobacz w manualu PHP" target="_manual...


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
#luq
post
Post #9





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


belliash ale może dopiero po kilku krokach będzie potrzeba "rozgałęzienia" operacji na obrazkach:
  1. <?php
  2. $img    = Filter::loadImg( 'image.jpg' );
  3.   $img2  = Filter::resize( $img, 640, 480 );  // pomniejszenie oryginału
  4.   $flip     = Filter::verticalFlip( $img2 );       // obrót pomniejszonego
  5.   $neg    = Filter::negativ( $img2 );           // negatyw z pomniejszonego
  6. ?>


Ten post edytował #luq 12.04.2009, 09:12:00


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
#luq
post
Post #10





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Przypuśćmy taki przypadek:
  1. <?php
  2. $img = Filter::loadImg( 'image.jpg' );
  3.    $img = Filter::filtre1( $img );
  4.    $img = Filter::filtre2( $img );
  5.    $img = Filter::filtre3( $img );
  6.    $img = Filter::filtre4( $img );
  7.    $img = Filter::filtre5( $img );
  8.    $img = Filter::filtre6( $img );
  9.    $img = Filter::filtre7( $img );
  10.    
  11.    $imgFilp = Filter::verticalFlip( $img );
  12.    Filter::saveImg( $imgFilp, 'image_new.jpg' );
  13.    
  14.    $imgSmall = Filter::resize( $img, 640, 480 );
  15.    Filter::saveImg( $imgSmall, 'image_new_small' );
  16. ?>


Jeśli, każdy obrazek, byłby obiektem, aby takie coś zrobić trzeba by powtórzyć wszystkie pierwsze filtry, bo nie da się cofnąć o jeden krok, tylko do początku. Chodzi mi o taki przypadek ;]


--------------------
Moja gra - scraby.io
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: 21.08.2025 - 01:06