PHP 生成等比居中水印图

/**
 * 图片增加水印
 * @param $img 待加水印的图片地址
 * @param $watermark 水印图片的地址
 * @param int $district
 * @param int $watermarkquality
 * @return bool|void
 */
function watermark($img, $watermark, $district = 5,$watermarkquality = 95){
    $imginfo = getimagesize($img);

    $width = $imginfo[0];
    if($imginfo[0] > $imginfo[1]) $width = $imginfo[1];
    $width = $width / 2;

    $size = 'static/layuimini/images/thum'.time().'.png';
    if(resize_image($watermark,$size,$width ,$width)) $watermark = $size;

    $watermarkinfo = getimagesize($watermark);

    $img_w = $imginfo[0];
    $img_h = $imginfo[1];

    $watermark_w = $watermarkinfo[0];
    $watermark_h = $watermarkinfo[1];

//    $watermark_w = $imginfo[0] / 2;
//    $watermark_h = $imginfo[1] / 2;

    if($district == 0) $district = rand(1,9);

    if(!is_int($district) OR 1 > $district OR $district > 9) $district = 9;

    switch($district){
        case 1:
            $x = +5;
            $y = +5;
            break;

        case 2:
            $x = ($img_w - $watermark_w) / 2;
            $y = +5;
            break;

        case 3:
            $x = $img_w - $watermark_w - 5;
            $y = +5;
            break;

        case 4:
            $x = +5;
            $y = ($img_h - $watermark_h) / 2;
            break;

        case 5:
            $x = ($img_w - $watermark_w) / 2;
            $y = ($img_h - $watermark_h) / 2;
            break;

        case 6:
            $x = $img_w - $watermark_w;
            $y = ($img_h - $watermark_h) / 2;
            break;

        case 7:
            $x = +5;
            $y = $img_h - $watermark_h - 5;
            break;

        case 8:
            $x = ($img_w - $watermark_w) / 2;
            $y = $img_h - $watermark_h - 5;
            break;

        case 9:
            $x = $img_w - $watermark_w - 5;
            $y = $img_h - $watermark_h - 5;
            break;
    }

    switch ($imginfo[2]) {
        case 1:
            $im = imagecreatefromgif($img);
            break;

        case 2:
            $im = imagecreatefromjpeg($img);
            break;

        case 3:
            $im = imagecreatefrompng($img);
            break;
    }

    switch ($watermarkinfo[2]) {
        case 1:
            $watermark_logo = imagecreatefromgif($watermark);
            break;

        case 2:
            $watermark_logo = imagecreatefromjpeg($watermark);
            break;

        case 3:
            $watermark_logo = imagecreatefrompng($watermark);
            break;
    }

    if(!$im or !$watermark_logo) return false;

    $dim = imagecreatetruecolor($img_w, $img_h);

    if(imagecopy($dim, $im, 0, 0, 0, 0,$img_w,$img_h )){
        imagecopy($dim, $watermark_logo, $x, $y, 0, 0, $watermark_w, $watermark_h);
    }


    $file = 'storage/w/w' . basename($img);
    $result = imagejpeg ($dim,$file,$watermarkquality);
    imagedestroy($watermark_logo);
    imagedestroy($dim);
    imagedestroy($im);

    if($result){
        unlink($watermark);
        return $file;
    }

    else {
        return false;
    }
}
/**
 * 改变图片的宽高
 * @param string $img_src 原图片的存放地址或url
 * @param string $new_img_path  新图片的存放地址
 * @param int $new_width  新图片的宽度
 * @param int $new_height 新图片的高度
 * @return bool  成功true, 失败false
 */
function resize_image($img_src, $new_img_path, $new_width, $new_height)
{
    $img_info = @getimagesize($img_src);
    if (!$img_info || $new_width < 1 || $new_height < 1 || empty($new_img_path)) {
        return false;
    }

    if (strpos($img_info['mime'], 'jpeg') !== false) {
        $pic_obj = imagecreatefromjpeg($img_src);
    } else if (strpos($img_info['mime'], 'gif') !== false) {
        $pic_obj = imagecreatefromgif($img_src);
    } else if (strpos($img_info['mime'], 'png') !== false) {
        $pic_obj = imagecreatefrompng($img_src);
    } else {
        return false;
    }
    $pic_width = imagesx($pic_obj);
    $pic_height = imagesy($pic_obj);

    if (function_exists("imagecopyresampled")) {
        imagesavealpha($pic_obj, true); // 保留源图片透明度
        $new_img = imagecreatetruecolor($new_width,$new_height);
        imagealphablending($new_img, false); // 不合并图片颜色
        imagesavealpha($new_img, true); // 保留目标图片透明度
        imagecopyresampled($new_img, $pic_obj, 0, 0, 0, 0, $new_width, $new_height, $pic_width, $pic_height);

    } else {
        imagesavealpha($pic_obj, true); // 保留源图片透明度
        $new_img = imagecreate($new_width, $new_height);
        imagealphablending($new_img, false); // 不合并图片颜色
        imagesavealpha($new_img, true); // 保留目标图片透明度
        imagecopyresized($new_img, $pic_obj, 0, 0, 0, 0, $new_width, $new_height, $pic_width, $pic_height);
    }

    if (preg_match('~.([^.]+)$~', $new_img_path, $match)) {
        $new_type = strtolower($match[1]);
        switch ($new_type) {
            case 'jpg':
                imagejpeg($new_img, $new_img_path);
                break;
            case 'gif':
                imagegif($new_img, $new_img_path);
                break;
            case 'png':
                imagepng($new_img, $new_img_path);
                break;
            default:
                imagejpeg($new_img, $new_img_path);
        }
    } else {
        imagejpeg($new_img, $new_img_path);
    }
    imagedestroy($pic_obj);
    imagedestroy($new_img);
    return true;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值