首页 > 文章列表 > nginx如何通过PHP代理给图片加水印

nginx如何通过PHP代理给图片加水印

php nginx
314 2023-05-11

nginx如何通过PHP代理给图片加水印

nginx 配置代理

location ~ /image/.*\.(gif|jpg|jpeg|png)$ {

    proxy_pass http://127.0.0.1:8888/test/watermark?url=$request_uri;

}

/img/ 匹配要代理的目录前缀,$request_uri 参数为访问的图片路径。

php 水印类

/** 水印类

 * Class Watermark

 * @package app\test

 */

class Watermark

{

    /** 合成图片水印

     * @param string $dstImage 原图片

     * @param string $waterImg 水印图

     */

    public static function imageMarking($dstImage, $waterImg){

        //获取图片信息

        $dstInfo = getimagesize($dstImage);

        $waterInfo = getimagesize($waterImg);

        //创建图像

        $dstImgObj = self::imageCreateFrom($dstImage, $dstInfo[2]);

        $waterImgObj = self::imageCreateFrom($waterImg, $waterInfo[2]);

        //合成水印

        imagecopyresized($dstImgObj,$waterImgObj,0, 0,0,0,$dstInfo[0], $dstInfo[1],$waterInfo[0],$waterInfo[1]);

        //输出图片

        self::imageOut($dstImgObj,$waterInfo[2]);

        //销毁资源对象

        imagedestroy($dstImgObj);

        imagedestroy($waterImgObj);

    }

    /** 生成图片对象

     * @param string $imgFile 图片路径

     * @param string $type 图片类型

     * @return false|\GdImage|resource

     */

    private static function imageCreateFrom($imgFile, $type) {

        switch ($type) {

            case IMAGETYPE_GIF:

                return imagecreatefromgif($imgFile);

            case IMAGETYPE_JPEG:

                return imagecreatefromjpeg($imgFile);

            case IMAGETYPE_PNG:

                return imagecreatefrompng($imgFile);

            default :   //其他格式

        }

    }

    /** 输出图片

     * @param string $imageObj

     * @param string $type

     */

    private static function imageOut($imageObj,$type){

        switch ($type) {

            case 1:

                header("Content-Type: image/gif");

                imagegif($imageObj);

                break;

            case 2:

                header("Content-Type: image/jpeg");

                imagejpeg($imageObj);

                break;

            case 3:

                header("Content-Type: image/png");

                imagepng($imageObj);

                break;

            default: //其他格式

        }

    }

}

调用示例

public function watermark(){

    //图片路径前缀

    $image = '/data/img/' . input('url');

    self::imageMarking($image,'watermark.png');

    exit;

}