Autor | Zpráva | ||
---|---|---|---|
leonid Profil |
#1 · Zasláno: 26. 5. 2010, 18:21:05
Dobrý podvečer,
Vytvořím červený čtverec 100x100px z transparentního gifu. <?php $im = imagecreatefromgif("img/empty/trans.gif"); $color = imagecolorallocate($im, 255, 0, 0); imagefilledrectangle($im,100,100,200,200,$color); imagegif($im,'img/empty/trans.gif'); imagedestroy($im); ?> Nyní by jsem chtěl červený čtverec vymazat, aby místo kde byl čtverec, bylo opět transparentní. Zkoušel jsem imagecolortransparent a jediného výsledku jsem dosáhl, že původní místo kde byl čtverec sice dokážu aby bylo opět transparentní, jenže zbytek obrázku o průhlednost přijde. Pořebuji být schopen objekty, které vytvořím pomocí php na transparentním pozadí dokázat později mazat, aniž by obrázek přišel o průhlednost. Jde to vůbec udělat? |
||
sarojan Profil |
#2 · Zasláno: 26. 5. 2010, 18:36:37
Co takhle přidat do URL ?object=rectangle a ten čtverec tam dávat jenom přes podmínku?
|
||
leonid Profil |
#3 · Zasláno: 26. 5. 2010, 18:52:32
To by mě nefungovalo. Mám průhlednou plochu 1000x1000px na které se vytváří barevné obrazce. Čas od času potřebuji nějaký z nich odstranit. Zkoušel jsem toto:
$im = imagecreatefromgif("img/empty/trans.gif"); $red = imagecolorallocate($im, 255, 0, 0); imagecolortransparent($im, $red); imagefilledrectangle($im, 100, 100, 200, 200, $red); imagegif($im, 'img/empty/trans.gif'); imagedestroy($im); Výsledkem je průhledné místo kde byl předtím čtverec, jenže zbytek obrázku už není transparentní, ale černý. Nerozumím tomu. |
||
leonid Profil |
#4 · Zasláno: 27. 5. 2010, 09:54:57
Nikdo neví jak to udělat??
|
||
Nox Profil |
#5 · Zasláno: 27. 5. 2010, 10:37:09
leonid:
Co dát colortransparent za filledrectangle? Jen tipuju |
||
leonid Profil |
#6 · Zasláno: 27. 5. 2010, 10:40:47
jdu to zkusit
|
||
leonid Profil |
#7 · Zasláno: 27. 5. 2010, 10:51:09
Tak nic, chová se to úplně stejně.
|
||
Joker Profil |
#8 · Zasláno: 27. 5. 2010, 11:01:03
leonid:
Kód v [#3] je podle mě správně, akorát nedávejte druhý parametr funkci imagecolortransparent. Nechcete přenastavit průhlednou barvu (což právě způsobí, že dříve průhledné části už nebudou průhledné), ale získat barvu, která je aktuálně nastavená jako průhledná a pak s ní vyplnit ten prostor- jestli jsem to dobře pochopil. |
||
leonid Profil |
#9 · Zasláno: 27. 5. 2010, 11:45:47 · Upravil/a: leonid
Jestli vám dobře rozumím, mám ten prostor jehož znám barvu a souřadnice (červený čtverec), vyplnit barvou, která je nastavená jako průhledná. To zní logicky, jenže jak ale zjistím která barva je nastavená jako průhledná (pokud nějaká vůbec je - nerozumím jak to funguje), když začínám s úplně prázdným průhledným obrázkem, do kterého umístím jednobarevný objekt?
Ještě jednou postup: 1) úplně prázdný transparentní gif o vel. 1000x1000px 2) vytvořím pomocí funkce #1 červený čtverec 100x100px (souřadnice jsou 100,100,200,200) 3) teď ten prostor kde je čtverec potřebuju zase vymazat (zprůhlednit). Znám jeho barvu a souřadnice. p.s. ještě dodám, že původní prázdný gif 1000x1000px vytvořím ručně ve photoshopu, ale to je asi jedno předpokládám. |
||
Joker Profil |
#10 · Zasláno: 27. 5. 2010, 11:48:34
leonid:
„jenžejak ale zjistím která barva je nastavená jako průhledná“ Vždyť to tam píšu: nedávejte druhý parametr funkci imagecolortransparent „pokud nějaká vůbec je“ No jestli kolem toho čtverce je průhledný prostor, tak tam zjevně průhledná barva nastavená je. |
||
leonid Profil |
Joker:
„No jestli kolem toho čtverce je průhledný prostor, tak tam zjevně průhledná barva nastavená je.“ Ok, stále nevím která to je. „Vždyť to tam píšu: nedávejte druhý parametr funkci imagecolortransparent“ The identifier of the new (or current, if none is specified) transparent color is returned. Zkusím rozluštit co mi to vrací Už začínám tušit jak na to. Přemalovat všechno "průhlednou" barvou a nechat co chci nechat. Trochu komplikované, ale půjde to. Opravdu to nejde jedním příkazem kdy vymažu (zprůhledním) konkrétní objekt dle souřadnic? Další 3 hod. experimentů pryč. Opravdu se nenajde někdo, kdo mi jednoznačně dokáže odpovědět jak to udělat? Asi je to neřešitelné čeho chci dosáhnout. V momentě kdy vyplním objekt "průhlednou" barvou se znehodnotí vše co do té doby bylo průhledné na neprůhledné :( Moderátor Joker: Po sobě jdoucí příspěvky sloučeny do jednoho
|
||
Joker Profil |
#12 · Zasláno: 27. 5. 2010, 16:50:10
leonid:
> The identifier of the new (or current, if none is specified) transparent color is returned. > Zkusím rozluštit co mi to vrací „Vrací identifikátor nové (nebo stávající, pokud nová není zadaná) průhledné barvy“ „Opravdu to nejde jedním příkazem kdy vymažu (zprůhledním) konkrétní objekt dle souřadnic?“ Jaký „objekt“? GIF nemá žádné objekty a nemá možnost je vymazat. V GIFu je průhledná jednoduše barva jako všechny ostatní a průhledné je to, co je nakreslené „průhlednou barvou“. Průhledná barva může být jen jedna a pokud změníte která barva je průhledná, věci nakreslené tou „dříve průhlednou“ přestanou být průhledné. Pořád si myslím, že by mělo stačit nechat si vrátit tu stávající průhlednou barvu a pak s ní vykreslit to co má být průhledné. Připadně by možná nějak šlo nahradit barvu za jinou barvu. |
||
leonid Profil |
#13 · Zasláno: 27. 5. 2010, 17:04:46 · Upravil/a: leonid
Joker:
„Jaký ‚objekt‘? GIF nemá žádné objekty a nemá možnost je vymazat.“ Jako vytvořím uvnitř průhledného obrázku 1000x1000px čtverec 100x100px jednoduše že ho "přikreslím" a okolí zůstává stále průhledné (viz. funkce #1) tak ho potřebuji "odkreslit". Bohužel jediné řešení které mě napadá je pokud budu potřebovat nějaký čtverec vymazat, znovu všechny odznova na prázdném gifu nakreslit s vynecháním toho, kterého se chci zbavit. Což je mizerné řešení.. Jinými slovy potřebujete zbourat jeden dům uvnitř čtvrti, tak zbořím celou čtvrť a znovu postavím všechny původní domy krom toho jednoho co jsem chtěl původně zbořit. |
||
leonid Profil |
#14 · Zasláno: 27. 5. 2010, 17:05:29 · Upravil/a: leonid
leonid:
„Pořád si myslím, že by mělo stačit nechat si vrátit tu stávající průhlednou barvu a pak s ní vykreslit to co má být průhledné.“ Toto jsem zkoušel na tisíc variací. Vždy mi to zneprůhlední co bylo dříve průhledné. Takže výsledek je sice "vymazání" té oblasti co potřebuji, ale nedokážu zabránit aby zůstalo neprůhledné co předtím průhledné bylo. |
||
Davex Profil |
#15 · Zasláno: 27. 5. 2010, 23:06:43
leonid:
Stále nechápu, proč by neměly fungovat Jokerovy rady. Tahle nějak mi to funguje: <?php $im = imagecreatefromgif("img/empty/trans.gif"); $red = imagecolorallocate($im, 255, 0, 0); imagefilledrectangle($im, 100, 100, 200, 200, $red); $trans = imagecolortransparent($im); /* zjistit průhlednou barvu v obrázku */ imagefilledrectangle($im, 100, 100, 200, 200, $trans); /* překreslit obdélník průhlednou barvou */ imagegif($im,'img/empty/trans.gif'); imagedestroy($im); ?> |
||
leonid Profil |
#16 · Zasláno: 28. 5. 2010, 03:33:13 · Upravil/a: leonid
Joker a Davex díky za pomoc, když srovnám script #3 se scriptem #15 už chápu kde jsem dělal chybu.
|
||
Časová prodleva: 14 let
|
0