V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
i8d0g
V2EX  ›  NGINX

用 nginx 给图片水印

  •  
  •   i8d0g · 2017-06-15 13:51:31 +08:00 · 3127 次点击
    这是一个创建于 2722 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到 https://github.com/vdvm/nginx-watermark 这个库

    我尝试了下,是可行的,但是我想增加个水印平铺的功能?请问有什么是实现思路?

    没写过 nginx 插件, 对 c 也只能说是了解.

    看代码主要水印处理部分主要在这里

    gdImageCopy(watermark_mix, dst, 0, 0, wdx, wdy, watermark->sx, watermark->sy);
    gdImageCopy(watermark_mix, watermark, 0, 0, 0, 0, watermark->sx, watermark->sy);
    gdImageCopyMerge(dst, watermark_mix, wdx, wdy, 0, 0, watermark->sx, watermark->sy, 75);
    

    是不是按坐标和水印图宽度连续调用 gdImageCopy 再 gdImageCopyMerge 即可?

    有没有更简单些的方法?

    第 1 条附言  ·  2017-06-15 18:53:27 +08:00

    看到有好几个人收藏, 但是没人回复,把我实验的结果贴出来吧

    直接使用gdImageCopyMerge来合并水印图和目标图的话,水印图的透明部分变成了不透明的,所以先用

    gdImageCopy把将要合并的区域扣出来与水印合并,这样Merge之后视觉上就是透明的了

    用连续gdImageCopyMerge的方法是可行的

      int offsetx = 0,offsety = 0;
        while(offsetx < dst->sx ){
            gdImageCopy(watermark_mix, dst, 0, 0, offsetx, wdy, watermark->sx, watermark->sy);
            gdImageCopy(watermark_mix, watermark, 0, 0, 0, 0, watermark->sx, watermark->sy);
            gdImageCopyMerge(dst, watermark_mix, offsetx, wdy, 0, 0, watermark->sx, watermark->sy, 75);
    
            while( offsety < dst->sy){
                gdImageCopy(watermark_mix, dst, 0, 0, offsetx, offsety, watermark->sx, watermark->sy);
                gdImageCopy(watermark_mix, watermark, 0, 0, 0, 0, watermark->sx, watermark->sy);
                 gdImageCopyMerge(dst, watermark_mix, offsetx, offsety, 0, 0, watermark->sx, watermark->sy, 75);
                offsety = offsety + watermark->sx + 10;
            }
            offsetx = offsetx + watermark->sx + 10;
            offsety = 0;
        }
    

    但是 这么写并不是理想的方案,因为这么处理之后的图片尺寸达到了原始图片的10倍.显然也不适合用在nginx上.

    1 条回复    2017-06-15 14:18:51 +08:00
    i8d0g
        1
    i8d0g  
    OP
       2017-06-15 14:18:51 +08:00
    也许标题改成 libgd 平铺水印比较合适。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5521 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 07:06 · PVG 15:06 · LAX 23:06 · JFK 02:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.