Объединение изображений в PHP при сохранении прозрачности - PullRequest
0 голосов
/ 07 марта 2011

Посмотрите здесь: http://tyilo.jbusers.com/PNG/progress.php?l=100&p=20

Я хочу удалить белую вещь в конце синей части, но я пробовал много разных вещей, которые не работали.1005 * При необходимости pngs можно найти в папке http://tyilo.jbusers.com/PNG/ (http://tyilo.jbusers.com/PNG/Empty.png)

header('Content-type: image/png');
echo imagepng(progressbar($_GET['l'], $_GET['p']));
function progressbar($length, $percentage)
{
$length = round($length / 2) * 2;
$percentage = min(100, max(0, $percentage));
if($length > 0)
{
    $bar = imagecreate($length, 14);
    $empty = imagecreatefrompng('Empty.png');
    $fill = imagecreatefrompng('Fill.png');
    $lempty = imagecreatefrompng('LeftEmpty.png');
    $lfill = imagecreatefrompng('LeftFill.png');
    $rempty = imagecreatefrompng('RightEmpty.png');
    $rfill = imagecreatefrompng('RightFill.png');
    $emptycaplength = min(7, $length / 2); //5 
    imagecopy($bar, $lempty, 0, 0, 0, 0, $emptycaplength, 14);
    imagecopy($bar, $rempty, $length - $emptycaplength, 0, 7 - $emptycaplength, 0, $emptycaplength, 14);
    if($length > 14)
    {
        imagecopyresized($bar, $empty, 7, 0, 0, 0, $length - 14, 14, 1, 14);
    }
    $filllength = round(($length * ($percentage / 100)) / 2) * 2;
    $fillcaplength = min(7, $filllength / 2);
    imagecopy($bar, $lfill, 0, 0, 0, 0, $fillcaplength, 14);
    imagecopy($bar, $rfill, $filllength - $fillcaplength, 0, 7 - $fillcaplength, 0, $fillcaplength, 14);
    if($filllength > 14)
    {
        imagecopyresized($bar, $fill, 7, 0, 0, 0, $filllength - 14, 14, 1, 14);
    }
    return $bar;
}
else
{
    return false;
}
}

Ответы [ 2 ]

1 голос
/ 15 марта 2011

попробуйте использовать imagecreatetruecolor () для создания вашего изображения.

http://www.php.net/manual/en/function.imagecreatetruecolor.php

0 голосов
/ 08 марта 2011

Я думаю, вам нужно установить альфа-смешение изображения ...

 imagealphablending($cropimg, false);
 imagesavealpha($cropimg, true);

Я также обнаружил, что это помогает установить распределение цвета.

imageColorAllocate ($cropimg, 0, 0, 0);

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

...