croc
26.10.2011, 15:57:54
Witam,
jak otrzymujecie anti-aliasing w obrazkach uzyskanych dzięki GD? Biblioteka ta posiada funkcję
imageantialias, jednak nie zdarzyło mi się jeszcze, by ta funkcja działała. Ja czasem robię obrazek kilkukrotnie większy niż pożądany i potem skaluję go z
imagecopyresampled. Znacie jakieś inne sposoby, a może udało się komuś z powodzeniem użyć
imageantialias?
Sephirus
27.10.2011, 08:25:41
Ok mogę napisać bzdurę ale...
Z tego co mi wiadomo to ta opcja działa jedynie na elementach, które sam "rysujesz"... Jeżeli tworzysz obrazek truecolor, włączasz antialias i rysujesz linie, kwadraty itp. to zadziała na nich antialias - nic mi nie wiadomo o czymś takim by to działało na całych obrazkach...
Możesz spróbować to jednak obejść ale może się okazać zbyt męczące dla pamieci i serwera ;P
Jeżeli antialias działa na linie itd to może też działać na wstawianie pojedynczych pixeli. Rób obrazek tak jak robisz do tej pory, tylko na końcu zrób jeszcze jeden nowy pusty obrazek o wymiarach tego wyjściowego i dosłownie pixel po pixelu spróbuj przerzucić każdy punkcik z jednego do drugiego (drugi musi mieć antialias) - wiem że może się to wydać szalony pomysł - ale kto wie może zadziała ;P
croc
27.10.2011, 20:08:32
Zauważyłem coś dziwnego. Okazało się, że
imageantialias działa, ale tylko na liniach i otwartych polygonach. Na otwartych elipsach ani na żadnych z "filled...()" nie działa.
Sephirus
28.10.2011, 09:51:44
Czyli miałem rację jednak
croc
28.10.2011, 10:32:41
Nie wiem co miałeś na myśli pisząc "całych obrazkach". Dla pojedynczych pikseli nie ma prawa działać, bo piksel jako piksel nie wymaga anti-aliasingu. A jak narysujesz sobie cokolwiek piksel po pikselu, to to jest wciąż tylko zbitek pikseli.
Sephirus
28.10.2011, 11:40:14
Ok tu źle napisałem - z tymi pixelami mówiłem, że nie wiem czy to zadziała, ale skoro działa dla linii nic nie stoi na przeszkodzie robić linie 1x1 pikseli

A co do obrazów to chodziło mi o obrazki ładowane z zewnątrz (nie rysowane w GD).
croc
28.10.2011, 11:48:46
No właśnie tak przypuszczałem. To gdzie miałeś rację?
Sephirus
28.10.2011, 12:00:49
W tym, "że to działa tylko na linie i kwadraty itp."
croc
28.10.2011, 12:25:10
Zrobiłem małe porównanie.
- Z włączonym imageantialias:

- Z wyłączonym imageantialias, narysowane na 2 razy większym obrazku i zmniejszone o połowę z imagecopyresampled:

Jak widać
imageantialias dobrze sobie radzi z liniami, a druga metoda z pełnymi obszarami. Metoda 2. wraz z większym ratio zmniejszania/zwiększania rysuje jaśniejsze linie, co jest zrozumiałe.