这个方法需要加载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; }