Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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
(IMG:http://luq10.files.wordpress.com/2009/03/rock.jpg)
Tworzy odbice:
(IMG:http://luq10.files.wordpress.com/2009/03/rockcd.png)

Ten post edytował #luq 11.04.2009, 17:35:45
Go to the top of the page
+Quote Post
#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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

No bez przesady, tyko przy jednej metodzie nie ma public (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)


Słuszna uwaga (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Tyle, że na razie tylko ja korzystam z niej, ale oczywiście nie widzę przeszkód żeby dopisać.
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 (IMG:http://forum.php.pl/style_emoticons/default/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ę
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. ?>
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ę...
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. (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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
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...
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
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 ;]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 15:50