#nette\utils\image #alpha #suicide #ihatenette
- Томас
- Člen | 85
Čus,
už se nervuju u blbýho obrázku asi 3 hodiny a už nemůžu. Snažím se nahrát obrázek z formuláře (PNG), zmenšit ho a uložit. Potom ten stejný obrázek předělat na ten stejný obrázek ale s 50% opacity. Může mi někdo vysvětlit proč mi to nefunguje? Díky
public function topformeuSuccess(Form $form)
{
$data = $form->getValues();
if(is_object($data->image) && $data->image->getName() != NULL)
{
// uloží se v pohodě s transparentním pozadím
$data->image->move("litaciparek.png");
// taky pohodička všechno jede
$img = new Image::fromFile("litaciparek.png");
$img->resize(28, NULL);
// vše ok obrázek stejnej žadný černý pozadí
$img->save("parek.png");
// taky funguje prostě prázdnej obrázek s průhlednym pozadím
$transka = Image::fromBlank($img->getWidth(), $img->getHeight() Image::rgb(255,255,255,100);
// a tady mi to tam hodí černý pozadí.. nechápu
$transka->place($img, 0, 0, 50); // parek s opacity 50% ne?
$transka->save("trasnkalitaciparek.png");
}
}
Umí mi někdo vysvětlit co dělám špatně? Snažil jsem se to nějak obalovat přes saveAlpha a alphaBlending ale bylo to úplně to samé, tak jsem to smazal. Díky za každou odpověď :***
- greeny
- Člen | 405
Podle Image::rgb je transparency v rozsahu 0–127. Nevím jestli to působí tvůj problém, ale je to dobrý vědět.
A btw… #use #less #hashtags #in #title, #this #is #not #instagram
- Томас
- Člen | 85
greeny napsal(a):
Podle Image::rgb je transparency v rozsahu 0–127. Nevím jestli to působí tvůj problém, ale je to dobrý vědět.
A btw… #use #less #hashtags #in #title, #this #is #not #instagram
thx, nevěděl jsem… ale můj problém to bohužel neřeší
- Томас
- Člen | 85
enumag napsal(a):
Jednak když něco nefunguje tak to vždy rozveď. Tedy řekni co ten kód vlastně dělá, jaký obrázek to vygeneruje / jakou chybu vyhodí?
Druhak myslím že ve volání
Image::rgb()
chceš jako poslední argument nulu.
Nevím teda jak tobě ale mě Image::rgb(255, 255, 255, 0) vrací bílou a Image::rgb(255, 255, 255, 127) průhlednou.
Jenoduše chci nahrát přes formulář PNG obrázek. Ten chci resiznout na
28px*XXpx a znovu úplně stejnej obrázek ale průhlednej na 50%. Myslím, že
jsem to popsal normálně i na poprvé.
Obrázek 1. se vytvoří v pořádku, resiznutý a s průhledným
pozadím.
$data->image->move("obrazek.png"); // pohoda je tam a je přesně tak jak chci
$img = Image::fromFile("obrazek.png"); // načte se taky v pořádku
$img->resize(28, NULL); // resizne se taky v pořádku
$img->save("obrazek_min.png"); // pohoda, použitelný a krásný obrzázek
Pak udělám následujicí (chci jeho opacity na 50%)
// novej obrázek, krásně průhlednej
$nimg = Image::fromBlank($img->getWidth(), $img->getHeight(), Image::rgb(255,255,255,127));
// na tenhle novej obrázek šoupnu ten starej akorát s 50% opacity
$nimg->place($img, 0, 0, 50);
// bum, obrázek sice průhledný je ale místo transparentního pozadí má pozadí černé
- Томас
- Člen | 85
enumag napsal(a):
Ha, asi se mi to podařilo vyřešit. :-)
$img = Image::fromFile(__DIR__ . '/test.png'); $img->alphaBlending(FALSE); $img->filter(IMG_FILTER_COLORIZE, 0, 0, 0, 63); $img->save(__DIR__ . '/test-transparent.png');
Ha, super! Zkusím to pak nahodit abych nemusel používat knihovnu.
Zkoušel jsem 2 knihovny, WideImage → to dělalo to samé jako Nette a potom
ImageWorkshop a to už šlapalo jak hodinky. Jinak dokázal by si mi vysvětlit
proč moje metoda v Nette nefungovala? Docela mě zajímá v čem je ten
problém.. díky :-)
- Томас
- Člen | 85
enumag napsal(a):
Myslím že by fungovala taky kdybys tam přidal ten řádek
$img->alphaBlending(FALSE);
, ale nezkoušel jsem to. Přes ten filtr je to o řád jednodušší. Dej vědět jestli to dělá co potřebuješ.
Ano, dělá to přesně to, co chci. Sice mi zmizně trošku víc stín ale ty obrázka pak vypadají lépe. :-)
Jinak moje metoda nefunguje ani s přidáním
$img->alphaBlending(FALSE);
, ale to je fuk. Aspoň, že už
nemusím používat externí knihovnu. Díky :-)
Editoval Томас (19. 2. 2015 14:51)