我让用户上传徽标的图像,然后尝试将其放置在服务器上的另一个图像之上。
POST 将作为参数叠加收据的位置。我收到的徽标始终是 png,它可能有也可能没有透明背景,并且必须保持相同的背景。
问题:我不知道为什么它会为我创造黑色空间,你能告诉我我犯了什么错误吗?
代码:
session_start();
$posiX = $_POST['x'];
$posiY = $_POST['y'];
$datoImg = $_SESSION['genImg'];
$logo = $datoImg['logo']; //'logo.png'
$fondo = 'original.jpg';
foto($fondo, $logo, $posiX, $posiY);
function foto($img_original, $marcadeagua, $posiX, $posiY){
$trozosimagenorig=explode(".",$img_original);
$extensionimagenorig=$trozosimagenorig[count($trozosimagenorig)-1];
if (preg_match("/jpg|jpeg|JPG|JPEG/", $extensionimagenorig)) {
$imgm=imagecreatefromjpeg($img_original);
}
if (preg_match("/png|PNG/", $extensionimagenorig)) {
$imgm=imagecreatefrompng($img_original);
}
if (preg_match("/gif|GIF/", $extensionimagenorig)) {
$imgm=imagecreatefromgif($img_original);
}
$marcadeagua= imagecreatefrompng($marcadeagua);
$xmarcaagua = $posiX;
$ymarcaagua = $posiY;
$ximagen= imagesx($imgm);
$yimagen=imagesy($imgm);
imagecopy($imgm, $marcadeagua, $xmarcaagua, $ymarcaagua,
0, 0, $xmarcaagua, $ymarcaagua);
//se copia la imagen
imagejpeg($imgm,'../assets/originalrand.jpg');
}
获得的结果:创建那些黑色空间:
原始图像:
背景图片:
形象标识:
事实是你几乎已经解决了。要将一个图像复制到另一个图像上,请使用(注意每个参数的顺序):
我将论点分开以使其更易于阅读。第一行获取图像资源(通常使用 生成
imagecreatefrom***()
)。然后是图像在目的地的位置( , ),从原点获取图像$dst_x
的$dst_y
位置($src_x
,$src_y
),以及从原点获取的尺寸($src_w
,$src_h
)。说清楚了,剩下的就是定位那些值了(代码中的注释)。
代码
结果
我上传了一个在免费托管上运行的示例:http: //mariano.freevar.com/70835/
附加的功能:
提供图像
如果不是生成文件,而是希望 PHP 提供图像:
如果没有,则在徽标中生成透明背景
假设徽标具有白色背景。如果我们想让所有白色都被视为透明: