根据源图比例生成水印图片

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

Comments are closed.