Visjusz
14.10.2009, 19:56:33
Witam, mój problem jest dość prosty jeżeli chodzi o inne języki programowania (AS czy VB), aczkolwiek zmuszony jestem do rozwiązania problemu w PHP.
Chodzi tu głównie o wypełnienie koła obrazkiem... funkcja imagefilledarc wypełnia okrąg podanym kolorem... a ja chciałbym go wypełnić obrazkiem (kwadratowym -> avatar), a resztę po za obwodem koła zrobić przeźroczystą. Można to zrobić na piechotę, określając pole koła i zmieniając kolor każdego pixel'a po za jego obwodem, ale wierze że jest inny sposób na to. Z góry dzięki;
wookieb
14.10.2009, 21:01:43
Sorry mój błąd. Obawiam się że trzeba będzie zrobić tak (ale głowy nie daje).
Wypełniasz przezroczystością, a potem białym kolorem. Tam gdzie jest białe miejsce pobierasz odpowiedni pixel z obrazka. Ale musiałbym się jeszcze głębiej zastanowić.
nmts
15.10.2009, 10:24:04
Wpadłem na pewien pomysł.
Robisz na kwadracie okrąg, który będzie obramowaniem koła, a następnie za pomocą pętli robisz kolejne okręgi większe od poprzedniego, które będą wypełnione przezroczystością, która w tym wypadku działa jak gumka. Jedynym problemem jest to, że ta przezroczystość jest robiona z konkretnego koloru, który trzeba zdefiniować, i jeśli ten kolor występuje w środku koła to też zrobi nich przezroczystość, ale myślę, że da się ominąć nakładając na obrazek niewidoczną dla oka warstwę minimalnie ściemniającą kwadrat, dzięki temu będzie można do przezroczystości użyć np. 255,255,255.
Fantazyn
15.10.2009, 11:45:31
Może użycie ImageMagick coś Ci pomoże.
Sprawdź ten przykład :
overlap w ImageMagick.
Pozdrawiam.
thek
15.10.2009, 21:13:16
Zrób sobie plik maski z wybranym przez siebie kształtem (kółko, prostokąt, wielokąt), który jest przezroczysty i potem nakładaj go na obrazek.Tylko pamiętaj o ustawieniu przezroczystości. Ja dziś się nieco z tym bawiłem, ale problem był z jednym. Właśnie ową przezroczystością. Jeśli wczytałeś plik maski z przezroczystością już to było OK. Gorzej gdy maskę tworzyłeś "w locie". Funkcje nakładające obrazek na obrazek mają z tym problem. W GD bowiem ustalasz domyślnie kolor w trybie RGB, ale możesz też jako RGBa. Tymczasem nakładając maskę utworzoną "w locie" widziało ją nie jako RGBa ale zwykłe RGB, kanał alpha olewając :/ Niezależnie jakiej używałem kombinacji imagesavealpha i imagealphablending na obu plikach. Wyjściem chyba pozostaje tworzenie pliku maski, zapis na serwerze i potem wczytanie go oraz nałożenie. No chyba, że ja coś przy tworzeniu owej przezroczystości w masce się rypałem