Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][GD] Problem z jakością
Forum PHP.pl > Forum > PHP
red9skull
Witam. Zacznę od początku. Serwis http://gametracker.com/ oferuje możliwość sprawdzania statystyk serwerów gier: lista graczy online, aktualna mapa itp. Mają też grafiki w postaci wykresów:



Zakładam własną sieć serwerów i chciałbym stworzyć stronkę, na której mógłbym na bieżąco monitorować serwery (bo na gametracker'ze grafiki są rzadko aktualizowane), więc postanowiłem zrobić podobne grafiki. Efekt:



Jak widać moje cyferki i pomarańczowa linia są poszarpane, stąd moje pytanie: czy da się (i jeśli tak, to jak) uzyskać "plynne" linie? Grafiki są generowane w PHP.
darko
Próbowałeś antyaliasingu?
red9skull
Cytat(darko @ 18.07.2010, 19:11:17 ) *
Próbowałeś antyaliasingu?

Heh, nie mam tej funkcji:
Kod
Fatal error: Call to undefined function imageantialias()


Mam zainstalowaną bibliotekę GD.
thek
Zrób większy obrazek, włącz antyaliasng i zmniejsz go do wymaganej wielkości winksmiley.jpg Schodkowanie powinno się optycznie zmniejszyć.
red9skull
@thek:
Nie wiem jakim cudem, ale nie mam funkcji do antyaliasingu. Choć posiadam GD.
thek
To praktycznie niemożliwe. Czemu -> (PHP 4 >= 4.3.2, PHP 5) Musiałbyś mieć bardzo starą wersję PHP, choć to
Cytat
Note: This function is only available if PHP is compiled with the bundled version of the GD library.
może być przyczyna. W każdym razie możesz zrobić coś "dookoła". Zrób to co wspomniałem, ale bez antyaliasingu. Jeśli przeskalujesz duży obrazek do małego... uzyskasz efekt antyaliasingu poprzez kompresję jpg winksmiley.jpg
red9skull
Cytat(thek @ 18.07.2010, 21:15:54 ) *
To praktycznie niemożliwe. Czemu -> (PHP 4 >= 4.3.2, PHP 5) Musiałbyś mieć bardzo starą wersję PHP, choć to
może być przyczyna. W każdym razie możesz zrobić coś "dookoła". Zrób to co wspomniałem, ale bez antyaliasingu. Jeśli przeskalujesz duży obrazek do małego... uzyskasz efekt antyaliasingu poprzez kompresję jpg winksmiley.jpg

A co jeśli obrazek jest PNG?
mayu11
  1. imagefilter($img, IMG_FILTER_SELECTIVE_BLUR);


Może tak?

@EDIT
Można spróbować jeszcze tak:

  1. imagefilter($im, IMG_FILTER_PIXELATE, 2);

red9skull
  1. imagefilter($img, IMG_FILTER_SELECTIVE_BLUR);

Po dodaniu tej funkcji dostaję cały czarny obraz.
  1. imagefilter($im, IMG_FILTER_PIXELATE, 2);

Nic nie zmienia. Nawet po zamianie 2 na 10, 54, 999999 itd.
mayu11
A czy imagefilter($im, IMG_FILTER_PIXELATE, 2); dałeś tuż przed imagexxx($img); questionmark.gif
red9skull
Cytat(mayu11 @ 18.07.2010, 22:01:53 ) *
A czy imagefilter($im, IMG_FILTER_PIXELATE, 2); dałeś tuż przed imagexxx($img); questionmark.gif

Możesz jaśniej? Raz piszesz $im drugi raz $img...
mayu11
  1. $zmienna = imagecreate(SZEROKOŚĆ,WYSOKOŚĆ);

To zmienna określana przy tworzeniu obrazka.

  1. imagefilter($zmienna, IMG_FILTER_PIXELATE, 2);


Łapiesz o co chodzi?...
thek
To czy obrazek jest png, jpg czy gwc (gówno wie co winksmiley.jpg ) jest nieistotne. Operacje rysowania i innych wykonujesz nie na pliku bezpośrednio tylko na formacie własnym biblioteki gd. To do niego jpg konwertujesz funkcją createimagefromjpg. Używając imagecreatetruecolor też taki tworzysz jako pusty.
Jeśli obrazek jest png, to jedynie musisz zadbać by nie stracił przezroczystości. O tym też na necie poczytać możesz.
Crozin
Tak trochę z innej beczki: może masz za to dostęp do ImageMagicka na serwerze?
red9skull
Po przeskalowaniu jest jeszcze gorzej:



@Crozin:
Na razie pracuję na locahoście, więc mam możliwość wgrania tej biblioteki. Tylko mogą być potem jaja jakbym chciał wrzucić na zewnętrzny serwer biggrin.gif Ale dobra, przyjmijmy, że mam - co teraz?
darko
Dokumentacja ImageMagik jest generalnie słaba, strzęp informacji jest tutaj ale niewiele wnosi, poza tym, że antyaliasing jest domyślnie włączony:

Cytat
Controls whether stroked outlines are antialiased. Stroked outlines are antialiased by default. When antialiasing is disabled stroked pixels are thresholded to determine if the stroke color or underlying canvas color should be used.
red9skull
Jak to się instaluje na linuxie?
darko
Na Debianie i debianopodobnych:
  1. apt-get install imagemagick


Generalnie czekerałt: http://www.ducea.com/2006/12/21/install-im...-557-on-debian/
red9skull
Cytat(darko @ 19.07.2010, 11:24:05 ) *
Na Debianie i debianopodobnych:
  1. apt-get install imagemagick


Generalnie czekerałt: http://www.ducea.com/2006/12/21/install-im...-557-on-debian/

Dzięki, dziwnym trafem mam to zainstalowane snitch.gif


=======================================

@EDIT:

  1. sudo apt-get install imagemagick
  2. Czytanie list pakietów... Gotowe
  3. Budowanie drzewa zależności
  4. Odczyt informacji o stanie... Gotowe
  5. imagemagick jest już w najnowszej wersji.

Gdy odpalam taki skrypt:
  1. <?php
  2.  
  3. $im = new Imagick();
  4. $im->newPseudoImage(50, 50, "gradient:red-black");
  5. $draw = new ImagickDraw();
  6.  
  7. /* Start a new pattern called "gradient" */
  8. $draw->pushPattern('gradient', 0, 0, 50, 50);
  9.  
  10. /* Composite the gradient on the pattern */
  11. $draw->composite(Imagick::COMPOSITE_OVER, 0, 0, 50, 50, $im);
  12.  
  13. /* Close the pattern */
  14. $draw->popPattern();
  15.  
  16. /* Use the pattern called "gradient" as the fill */
  17. $draw->setFillPatternURL('#gradient');
  18.  
  19. /* Set font size to 52 */
  20. $draw->setFontSize(52);
  21.  
  22. /* Annotate some text */
  23. $draw->annotation(20, 50, "Hello World!");
  24.  
  25. /* Create a new canvas object and a white image */
  26. $canvas = new Imagick();
  27. $canvas->newImage(350, 70, "white");
  28.  
  29. /* Draw the ImagickDraw on to the canvas */
  30. $canvas->drawImage($draw);
  31.  
  32. /* 1px black border around the image */
  33. $canvas->borderImage('black', 1, 1);
  34.  
  35. /* Set the format to PNG */
  36. $canvas->setImageFormat('png');
  37.  
  38. /* Output the image */
  39. header("Content-Type: image/png");
  40. echo $canvas;
  41.  
  42. ?>

To zwraca mi:
Kod
Fatal error: Class 'Imagick' not found in /home/r9s/public_html/php/gd/test.php on line 3

Dlaczego?
Crozin
ImageMagick to nie jest coś stricte dla PHP - to po prostu program, który siedzi sobie na dysku. Potrzebujesz jeszcze pobrać coś w stylu php-imagick czy coś w ten deseń, upewnić się że w php.ini jest włączone i zrestartować serwer.
red9skull
Cytat(Crozin @ 19.07.2010, 12:08:32 ) *
ImageMagick to nie jest coś stricte dla PHP - to po prostu program, który siedzi sobie na dysku. Potrzebujesz jeszcze pobrać coś w stylu php-imagick czy coś w ten deseń, upewnić się że w php.ini jest włączone i zrestartować serwer.

Ah, dzięki winksmiley.jpg
Dla przyszłych pokoleń:
Kod
sudo ap-get install php5-imagick
darko
Cytat(red9skull @ 19.07.2010, 13:44:31 ) *
Ah, dzięki winksmiley.jpg
Dla przyszłych pokoleń:
Kod
sudo ap-get install php5-imagick

literówka, powinno być:
  1. sudo apt-get install php5-imagick
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.