这个方法需要加载gd库
解决了原图是png格式生成其他格式的时候背景为黑色
生成步骤为3步
step1:
按比例生成新的水印图片
step:2
将新水印图片拷贝到源图上
step:3
新建一个矩形图片,将背景色设置为白色,然后将第二步的图片拷贝至图片上。
(这部主要是解决原图png格式的时候背景为黑色)
<?php
//原图
$o=imagecreatefrompng('2.png');
//水印图
$w=imagecreatefrompng('w.png');
$im = createWatermark($o, $w, 0.2);
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
/**
* [根据源图比例生成水印图片]
* @param [resource] $oimage [源图片]
* @param [resource] $wimage [水印图片]
* @param [float] $proportion [比例]
* @return [resource] [结果图片]
*/
function createWatermark($oimage, $wimage, $proportion)
{
//参数
$oimage_w = imagesx($oimage);
$oimage_h = imagesy($oimage);
$new_wimage_w = round($oimage_w*$proportion);
$new_wimage_h = round($oimage_h*$proportion);
$old_wimage_w = imagesx($wimage);
$old_wimage_h = imagesy($wimage);
/*创建新的水印图片*/
$new_wimage = imagecreatetruecolor($new_wimage_w, $new_wimage_h);
//保留图片alpha通道
imagesavealpha($new_wimage, true);
imagesavealpha($oimage, true);
//设置alpha通道
$alpha = imagecolorallocatealpha($new_wimage, 0, 0, 0, 127);
//将通道画在新的水印图片上
imagefill($new_wimage, 0, 0, $alpha);
//拷贝部分图像并调整大小
imagecopyresampled($new_wimage, $wimage, 0, 0, 0, 0, $new_wimage_w, $new_wimage_h, $old_wimage_w, $old_wimage_h);
/*将水印图片添加到源图片中*/
imagecopy($oimage, $new_wimage, 100, 100, 0, 0, $new_wimage_w , $new_wimage_h);
/*新建新图片,将生成的图片拷贝到这个图片中(解决原图是png的alpha通道问题)*/
$rimage = imagecreatetruecolor($oimage_w, $oimage_h);
$white = imagecolorallocate($rimage, 255, 255, 255);
imagefilledrectangle($rimage, 0, 0, $oimage_w, $oimage_h, $white);
imagecopy($rimage, $oimage, 100, 100, 0, 0, $oimage_w, $oimage_h);
return $rimage;
}