2010-04-01 3 views
2

Я хочу, чтобы изображения И ИР создавали из файлов объединенное изображение в соответствии с данными ID. Этот код вызывается ajax и возвращает имя файла изображения (время сервера для предотвращения кеширования браузера). код:Неправильные цвета при слиянии изображений с PHP

if (isset($_REQUEST['items'])){ 
$req_items = $_REQUEST['items']; 
} else { 
    $req_items = 'a'; 
} 
$items = explode(',',$req_items); 

$bg_img = imagecreatefrompng('bg.png'); 

for ($i=0; $i<count($items); $i++){ 

$main_img = $items[$i].'-large.png'; 

$image  = imagecreatefrompng($main_img); 

$image_tc = imagecreatetruecolor(300, 200); 
imagecopy($image_tc,$image,0,0,0,0,300,200); 
$black = imagecolorallocate($image_tc, 0, 0, 0); 
imagecolortransparent($image_tc, $black); 

$opacity  = 100; 
$bg_width = 300; 
$bg_height = 200; 

$dest_x   = 0;//$image_size[0] - $bg_width - $padding; 
$dest_y   = 0;//$image_size[1] - $bg_height - $padding; 

imagecopymerge($bg_img, $image_tc, $dest_x, $dest_y, 0, 0, $bg_width, $bg_height, $opacity) 

; 

} 
$file = $_SERVER['REQUEST_TIME'].'.jpg'; 
imagejpeg($bg_img, $file, 100); 
echo $file; 
imagedestroy($bg_img); 
imagedestroy($image); 
die(); 

Изображения отображаются точно так, как я хочу, но с неправильным цветом. Я в последнее время добавил часть с imagecreatetruecolor и imagecolortransparent, и все еще получил неправильные результаты.

Я также сохранил сам PNG в 24-битном формате, а также позже, как 8 бит - не помогая. все идеи приветствуются! Благодаря

ответ

2

После долгого времени попытки ... как всегда решение было очень простым:

Просто сделать фоновое изображение 24 бит, а также. Итак, если кто-то ищет способ сделать слоистые прозрачные изображения, то это полный код:

<?php 

if (isset($_REQUEST['items'])){ 
    $req_items = $_REQUEST['items']; 
} else { 
    $req_items = 'a'; 
} 

$items = explode(',',$req_items); 

$bg_img = imagecreatefrompng('bg.png'); 
$bg_tc = imagecreatetruecolor(300, 200); 
imagecopy($bg_tc,$bg_img,0,0,0,0,300,200); 


for ($i=0; $i<count($items); $i++){ 

    $main_img = $items[$i].'-large.png'; 

    $image  = imagecreatefrompng($main_img); 
    $image_tc = imagecreatetruecolor(300, 200); 



    imagecopy($image_tc,$image,0,0,0,0,300,200); 
    $black = imagecolorallocate($image_tc, 0, 0, 0); 
    imagecolortransparent($image_tc, $black); 


    $opacity  = 100; 
    $bg_width = 300; 
    $bg_height = 200; 

    $dest_x   = 0;//$image_size[0] - $bg_width - $padding; 
    $dest_y   = 0;//$image_size[1] - $bg_height - $padding; 

    imagecopymerge($bg_tc, $image_tc, $dest_x, $dest_y, 0, 0, $bg_width, $bg_height, $opacity); 

} 
$file = $_SERVER['REQUEST_TIME'].'.jpg'; 
imagejpeg($bg_tc, $file, 100); 
echo $file; 
imagedestroy($image); 
imagedestroy($bg_img); 
imagedestroy($bg_tc); 
imagedestroy($image_tc); 
die(); 
?> 
Смежные вопросы