如何使用 php 合并 jpg 和 png 图像?
How to merge jpg and png images using php?
这是 png 图片:
这是 jpg 图片:
两者的宽度和高度相同。
预期输出:
我使用的代码:
<?php
header('content-type: image/jpeg');
if(isset($_GET['source'])){
$source = $_GET['source'] ;
$watermark = imagecreatefrompng('png.png');
$watermark_height = imagesy($watermark);
$watermark_width = imagesx($watermark);
$image = imagecreatetruecolor($watermark_width,$watermark_height);
$image = imagecreatefromjpeg($source);
imagecopymerge($image, $watermark, 0, 0, 0, 0, $watermark_width, $watermark_height, 100 );
imagepng($image);
}
?>
当前输出:
你能帮我得到我预期的输出吗?
您必须启用 Alpha 通道。要使用合并功能并保留 alpha 通道,您可以使用此处发布的功能:http://de2.php.net/manual/en/function.imagecopymerge.php#92787
您的代码将如下所示:
header('content-type: image/png');
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
// creating a cut resource
$cut = imagecreatetruecolor($src_w, $src_h);
// copying relevant section from background to the cut resource
imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
// copying relevant section from watermark to the cut resource
imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
// insert cut resource to destination image
imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct);
}
$source ='b.jpg';
$watermark = imagecreatefrompng('a.png');
$watermark_height = imagesy($watermark);
$watermark_width = imagesx($watermark);
$image = imagecreatetruecolor($watermark_width,$watermark_height);
$image = imagecreatefromjpeg($source);
imagecopymerge_alpha($image, $watermark, 0, 0, 0, 0, $watermark_width, $watermark_height, 100 );
imagepng($image);
否则,alpha 通道会被一种颜色填充,并且您的背景会被完全填充。
注意:您还混淆了内容类型 image/jpeg 和输出函数 imagepng。 (我在我的解决方案中选择了 image/png & imagepng。)
这是 png 图片:
这是 jpg 图片:
两者的宽度和高度相同。
预期输出:
我使用的代码:
<?php
header('content-type: image/jpeg');
if(isset($_GET['source'])){
$source = $_GET['source'] ;
$watermark = imagecreatefrompng('png.png');
$watermark_height = imagesy($watermark);
$watermark_width = imagesx($watermark);
$image = imagecreatetruecolor($watermark_width,$watermark_height);
$image = imagecreatefromjpeg($source);
imagecopymerge($image, $watermark, 0, 0, 0, 0, $watermark_width, $watermark_height, 100 );
imagepng($image);
}
?>
当前输出:
你能帮我得到我预期的输出吗?
您必须启用 Alpha 通道。要使用合并功能并保留 alpha 通道,您可以使用此处发布的功能:http://de2.php.net/manual/en/function.imagecopymerge.php#92787
您的代码将如下所示:
header('content-type: image/png');
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
// creating a cut resource
$cut = imagecreatetruecolor($src_w, $src_h);
// copying relevant section from background to the cut resource
imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
// copying relevant section from watermark to the cut resource
imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
// insert cut resource to destination image
imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct);
}
$source ='b.jpg';
$watermark = imagecreatefrompng('a.png');
$watermark_height = imagesy($watermark);
$watermark_width = imagesx($watermark);
$image = imagecreatetruecolor($watermark_width,$watermark_height);
$image = imagecreatefromjpeg($source);
imagecopymerge_alpha($image, $watermark, 0, 0, 0, 0, $watermark_width, $watermark_height, 100 );
imagepng($image);
否则,alpha 通道会被一种颜色填充,并且您的背景会被完全填充。
注意:您还混淆了内容类型 image/jpeg 和输出函数 imagepng。 (我在我的解决方案中选择了 image/png & imagepng。)