#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);
}
?>