Špatně vykresléný PNG obrázek s průhledností

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
gavec
Člen | 68
+
0
-

Zdravím,
vím, že už se to tady něco podobného párkrát řešilo, ale nejsem z toho moc chytrý. Snažím se uploadovat PNG obrázek s průhledností, ale vykresluje se mi na černém pozadí. Není to watermark. Je to obyč obrázek.
Pro upload používám tento kousek kódu:

$image = NImage::fromFile($_FILES['image']['tmp_name']);
$image->sharpen();
$image->save($path = $uploadfile);
chmod($uploadfile, 0777);

$image->resize(200, 200);
$image->sharpen();

$image->save($path = $uploadthumb);
chmod($uploadthumb, 0777);

U PNG to bohužel nejde. Nevěděl by někdo, jak se špatně vykresleného png obrázku zbavit?
NETTE: 0.9.7b stable s prefixy
PHP: 5.3.3
Předem díky.

loov
Člen | 49
+
0
-

Zkus, čistě pro test, odstranit příkazy pro úpravu obrázku. Tedy $image->resize(), $image->sharpen(). Příjde mi divné, že by samotné nahrávání, poškodilo obrázek. Dále bych se pak podíval, jestli tvůj problém setrvává i v novější verzi nette. Protože 0.9.x je skutečně už dinosauří build :-)

gavec
Člen | 68
+
0
-

Ano je to příkazy pro úpravu obrázku. Minimálně resize je tam nutný. Projekt už mám rozjetý na 0.9.7 a nevím jestli je dobré řešení kvůli tomuto přecházet na novější verzi. Mělo by to přece jít i na té starší. Otázka je, jak? :)

gavec
Člen | 68
+
0
-

Tak už to funguje. Kód jsem upravil takto:

$image = NImage::fromFile($_FILES['image']['tmp_name']);

$image->save($path = $uploadfile);
chmod($uploadfile, 0777);

$image->alphaBlending(true);
$image->resize(200, 200);

$image->alphaBlending(false);
$image->saveAlpha(true);

$image->save($path = $uploadthumb);
chmod($uploadthumb, 0777);
loov
Člen | 49
+
0
-

To je dobře, že se to podařilo vyřešit. Bude se mi to třeba někdy hodit.

Editoval loov (1. 2. 2011 13:04)

jtousek
Člen | 951
+
0
-

Už jsem to před nějakou dobou hlásil jako chybu i s opravou. Kupodivu to neprošlo.

gavec
Člen | 68
+
0
-

Prošlo, ale nevěděl jsem, jak upravit funkci „fromBlank“ na funkci „fromFile“.

loov
Člen | 49
+
0
-

David Grudl píše toto cituji:

problém s průhledností Image nemá. Pokud chceš ukládat průhlednost, zavolej před save ještě $image->savealpha(TRUE);

Nic méně žádnou takovou metodu jsem v API nenešel :-) Kde jsi jí našel gavce?

Editoval loov (1. 2. 2011 13:33)

jasir
Člen | 746
+
0
-

Image kromě svých metod umožnuje volání všech php funkcí image<something> pomocí magického __call. Tedy $image->savealpha(TRUE) interně volá imagesavealpha($this->image, TRUE).

gavec
Člen | 68
+
0
-

Našel jsem to tady: https://forum.nette.org/…image-resize Bylo však pořeba funkci resize obalit takhle:
$image->alphaBlending(true);
$image->resize(200, 200);

$image->alphaBlending(false);
$image->saveAlpha(true);

Jasir už to ale shrnul.