Maison >développement back-end >Problème PHP >Comment nginx ajoute-t-il un filigrane aux images via un proxy PHP (code détaillé)

Comment nginx ajoute-t-il un filigrane aux images via un proxy PHP (code détaillé)

WBOY
WBOYavant
2022-06-09 09:54:032306parcourir

Cet article vous apporte des connaissances pertinentes sur nginxcomment ajouter des filigranes aux images via PHPproxy, ainsi que des problèmes connexes sur la façon de l'appeler. Cela peut être résolu grâce à des exemples de code. J'espère que cela sera utile à tout le monde.

Comment nginx ajoute-t-il un filigrane aux images via un proxy PHP (code détaillé)

(Tutoriels recommandés : tutoriel nginx, tutoriel vidéo PHP)

proxy de configuration nginx

location ~ /image/.*\.(gif|jpg|jpeg|png)$ {
    proxy_pass http://127.0.0.1:8888/test/watermark?url=$request_uri;
}

/img/ Faites correspondre le préfixe du répertoire à proxy, $ request_uri Le paramètre est le chemin de l'image à laquelle accéder. /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;
}

nginx 水平好的,可以试着用 http_image_filter_module

Classe de filigrane php

rrreeeExemple d'appelrrreeenginx Si vous êtes bon dans ce domaine, vous pouvez essayer d'utiliser le module http_image_filter_module pour ajouter des filigranes. un geste impuissant pour moi

(Tutoriels recommandés : 🎜Tutoriel nginx🎜, 🎜Tutoriel vidéo PHP🎜)🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer