Исходные данные... - есть некоторый набор прозрачных GIF-ов - в скрипт передается параметр, в зависимости от которого определяется набор используемых GIF-ов На выходе... - PNG (т.к. генерация гифов в последних GD-библиотеках не представляется возможным) картинка с прозрачным фоном, состоящая из набора исходных GIF-ов. Мудохаюсь уже 3 дня - нифига не выходит. Основная трабла в том, что теряется какой-либо цвет картинки, а соответственно падает качество, и то, GIF-ы, используемые для построения картинки могут наслаиваться. а потому просто взять и принудительно присобачить всем какой-то "цвет фона", который потом указать, как прозрачный, не выходит, т.к. при наслоении происходит перекрывание канвой перекрывающего элемента... Никакой "подложки" нет - прозрачная "подложка" должна генериться на лету, т.к. размер подложки тоже непостоянный. Подмогните кодом, который даст возможность это реализовать. по сути вызыватся функция, в которую передается список файлов-частей (GIF-ы), а на выходе нужно получить картинку в PNG-формате. Тезисно обозначу код... Код (Text): ... // тут разбирается параметр и генерится список GIF-ок и размер выходной картинки ($sz) $fls = array(имена файлов); $gifs = LoadGifs($fls); // загруженные GIF-ы $img = GenerateImg($sz, $gifs); // генерация выходной картинки Header("Content-type: image/png"); imagepng($img); function LoadGifs($fls) { ... }; function GenerateImg($sz, $gifs) { ... }; Спасайте, народ - горю!
как пытаетесь? кодом, если можно. P.S. это что за последние библиотеки такие? Код (Text): GD Version bundled (2.0.28 compatible) все работает.
GD Version bundled (2.0.28 compatible) где достать можно? не подскажете? - у меня 2.0.18 - на фугкцию imagegif ругается
Обновил библиотеку - все равно не выходит.... Получаю картинку на сером фоне - чувствую, что что-то не так или при чтении "базовых" GIF-ок или при составлении из них одной картинки, но не могу понять что именно.... Вот немного обрезанный (части, которые не работают с графикой) код скрипта: Код (Text): <?php тут идет обработка входных параметров и набор массива $cfg (в нем такие параметры, как смещение, размеры картинок базовый и картинки в целом) ... $img = null; $imgs = array(); if((!LoadImgs($cfg["lst"], &$imgs))or(!CreateCanvas($cfg, &$img))) return; if(BuildImg($cfg, &$img, &$imgs)) { Header("Content-type: image/gif"); imagegif($img); }; FreeCanvas(&$img); FreeImgs(&$imgs); /**********************************************/ // построение картинки function BuildImg($cfg, &$img, &$imgs) { $ret = true; switch(count($imgs)) { case 1: imagecopy($img, $imgs[0], 0, 0, 0, 0, $cfg["w"], $cfg["h"]); break; case 2: imagecopy($img, $imgs[0], 0, 0, 0, 0, $cfg["w"], $cfg["h"]); imagecopy($img, $imgs[1], $cfg["dw"], 0, 0, 0, $cfg["w"], $cfg["h"]); break; ... }; return $ret; }; // Удаление канвы function FreeCanvas(&$img) { imagedestroy($img); }; // Создание канвы function CreateCanvas($cfg, &$img) { $w = 0; $h = 0; if (count($cfg["lst"]) > 2) {$w = $cfg["rw"]; $h = $cfg["rh"];} else if (count($cfg["lst"]) > 1) {$w = $cfg["rw"]; $h = $cfg["h"];} else {$w = $cfg["w"]; $h = $cfg["h"];}; return ($img = @imagecreate($w, $h)); }; // выгрузка картинок function FreeImgs(&$imgs) { foreach($imgs as $key => $val) imagedestroy($imgs[$key]); }; // загрузка кртинок function LoadImgs($lst, &$imgs) { if(count($imgs) > 0) return false; $path = "pics/"; foreach ($lst as $key => $val) { $val = trim(strtolower($val)); if(file_exists($path.$val.".gif")) $imgs[$key] = @imagecreatefromgif($path.$val.".gif"); else if(file_exists($path.$val.".png")) $imgs[$key] = @imagecreatefrompng($path.$val.".png"); else continue; }; return (count($imgs) == count($lst)); }; ?> Подозрение на траблы в функции CreateCanvas() или LoadImgs()... Хелп, плизззз...