Autor Zpráva
petr
Profil *
Ahoj, řeším upload obrázků na server, kde uživatel může nahrát obrázky s příponou .jpg, .gif a .png a na serveru se uloží jako .png. Na server obrázek putuje jako Data URL. Chtěl bych také u .png a .gif zachovat průhlednost.
Narazil jsem na tenhle článek a zprovoznil si to:
function dataurl_decode_file($dataurl) {
    $data = preg_replace("/data:.*;base64,/", "", $dataurl);
    $data = str_replace(' ', '+', $data);
    $data = base64_decode($data);
    return $data;
}
    $image = imagecreatefromstring(dataurl_decode_file($_POST["image_dataurl"]));
    $width = imagesx($image);
    $height = imagesy($image);
    $newimage = imagecreate($width, $height);
    $color = imagecolorallocate($newimage, 255, 255, 255);
    imagefill($newimage, 0, 0, $color);
    if($transparent) {
        imagecolortransparent($newimage, $color);
    }
    imagecopyresampled($newimage, $image, 0, 0, 0, 0, $width, $height, $width, $height);
imagepng($newimage, "uploads/obrazek.png");
U většiny obrázků to funguje dobře i s průhledností. Zjistil jsem však, že u některých obrázků je zřejmě problém s barvami.
Když se pokusím nahrát tenhle obrázek:

na server se uloží tohle:

Nevíte, čím by to mohlo být a jak to opravit?
Davex
Profil
petr:
To bude asi způsobeno velkým počtem barev v obrázku, které se nevejdou do palety 256 barev.

imagecreate -> imagecreatetruecolor

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: