#nette\utils\image #alpha #suicide #ihatenette

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Томас
Člen | 85
+
-1
-

Č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
+
+9
-

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
+
0
-

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ší

enumag
Člen | 2118
+
0
-

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.

Editoval enumag (18. 2. 2015 19:09)

Томас
Člen | 85
+
0
-

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
+
0
-

Už jsem to „opravil“ tím, že jsem použil externí knihovnu. Stejně by mě ale zajímalo, proč to nefunguje přes Nette. Kdyby někdo věděl, dejte vědět. :-)

enumag
Člen | 2118
+
0
-

Jen pro zajímavost, jakou knihovnu jsi použil?

enumag
Člen | 2118
+
+2
-

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');
Томас
Člen | 85
+
0
-

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 :-)

enumag
Člen | 2118
+
+1
-

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š.

Томас
Člen | 85
+
0
-

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)

enumag
Člen | 2118
+
0
-

Pro úplnost, place by v Nette 2.3 mělo fungovat také.

https://github.com/…tils/pull/57

chemix
Nette Core | 1310
+
+1
-

@Томас upravil bych titulek, at se lidi neuci tyhle hash pekla zde pouzivat ale spise at se nauci psat vystizny jednoznacny popis, prospesny pro nase budouci ja i jine lidi co by na neco podobneho narazili v budoucnu