Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Klasa] Filter
Forum PHP.pl > Inne > Oceny
#luq
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:
#luq
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ć.
#luq
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ę
erix
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. ?>
#luq
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ę...
erix
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. ?>
#luq
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.
#luq
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. ?>
#luq
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 ;]
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.