изображение png, скопированное в другое изображение php

#php #image #png

#php #изображение #png

Вопрос:

Я пытаюсь добавить изображение png на другое изображение. Единственная проблема, с которой я сталкиваюсь, заключается в том, что изображение в формате png создает прозрачный фон вокруг него вместо фона другого изображения.

Вот изображение:

введите описание изображения здесь

Ожидаемый результат:

введите описание изображения здесь

Это код:

 <?php
    $img_name = "image_" . date("U") . ".png";
    $whoareyou_src = imagecreatefrompng('who-are-you.png');

    create_image($img_name, $whoareyou_src);
    print "<img src=". $img_name .">";

    function  create_image($img_name, $whoareyou_src) {
        $im = @imagecreate(800, 610) or die("Cannot Initialize new GD image stream");
        $background_color = imagecolorallocate($im, 0, 128, 128);  // teal

        // imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )
        $success = imagecopy($im, $whoareyou_src, 0, 0, 0, 0, imagesx($whoareyou_src), imagesy($whoareyou_src));
        echo "Image Copy: " . $success . "<br>"; // testing

        imagepng($im, $img_name);

        imagedestroy($im);
        imagedestroy($whoareyou_src);
    }

?>
 

Я подумал, что установка прозрачного фона может помочь:

 imagecolortransparent($whoareyou_src, imagecolorallocate($whoareyou_src, 0, 0, 0));
 

Но это ничего не изменило.

Обновить

Пытался использовать imagecopyresampled и alpha настройки, но все тот же результат:

 <?php
    $img_name = "image_" . date("U") . ".png";
    $whoareyou_src = imagecreatefrompng('who-are-you.png');

    create_image($img_name, $whoareyou_src);
    print "<img src=". $img_name .">";

    function  create_image($img_name, $whoareyou_src) {
        $im = @imagecreate(800, 610) or die("Cannot Initialize new GD image stream");
        imagealphablending($im, false);
        imagesavealpha($im,true);

        $background_color = imagecolorallocate($im, 0, 128, 128);  // teal

        $success = imagecopyresampled($im, $whoareyou_src, 0, 0, 0, 0, imagesx($whoareyou_src), imagesy($whoareyou_src), imagesx($whoareyou_src), imagesy($whoareyou_src));
        echo "Image Copy: " . $success . "<br>";

        imagepng($im, $img_name);

        imagedestroy($im);
        imagedestroy($whoareyou_src);
    }

?>
 

Комментарии:

1. Ваше описание довольно неясно, вы хотите иметь прозрачный или бирюзовый фон? Вы пытались предварительно заполнить фоновое изображение своим цветом, используя imagefill ?

2. Что я хотел бы иметь, так это бирюзовый фон. Тот же результат при использовании imagefill .

Ответ №1:

Попробуйте что-то вроде этого…

 create_image($img_name, $whoareyou_src);
print "<img src=". $img_name .">";

function  create_image($img_name, $whoareyou_src) {
    $im = @imagecreatetruecolor(800, 610) or die("Cannot Initialize new GD image stream");
    imagealphablending($im, false);
    imagesavealpha($im,true);

    $background_color = imagecolorallocate($im, 0, 128, 128);  // teal

    // imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )
    $success = imagecopyresampled($im, $whoareyou_src, 0, 0, 0, 0, imagesx($whoareyou_src), imagesy($whoareyou_src));
    echo "Image Copy: " . $success . "<br>"; // testing

    imagepng($im, $img_name);

    imagedestroy($im);
    imagedestroy($whoareyou_src);
}
 

?>

Комментарии:

1. На самом деле я только что попробовал это сделать, хотя результат тот же. Я обновлю свой вопрос.

2. Я только что заметил, что вы добавили imagecreatetruecolor ! Я не добавил, что это моя ошибка.

Ответ №2:

Это должно сработать:

 <?php
    $img_name = "image_" . date("U") . ".png";
    $whoareyou_src = imagecreatefrompng('who-are-you.png');

    create_image($img_name, $whoareyou_src);
    print "<img src=". $img_name .">";

    function  create_image($img_name, $whoareyou_src) {
        $im = @imagecreatetruecolor(800, 610) or die("Cannot Initialize new GD image stream");
        $background_color = imagecolorallocate($im, 0, 128, 128);  // teal
        imagefilledrectangle($im, 0, 0, 800, 610, $background_color);

        // imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )
        $success = imagecopy($im, $whoareyou_src, 0, 0, 0, 0, imagesx($whoareyou_src), imagesy($whoareyou_src));
        echo "Image Copy: " . $success . "<br>"; // testing

        imagepng($im, $img_name);

        imagedestroy($im);
        imagedestroy($whoareyou_src);
    }

?>