保存为时输出的图像不同

时间:2012-02-13 19:21:28

标签: php html image

我希望能够在用户保存图像时生成不同的图像(带水印)。

我知道:

  • Broswer在直接图像访问时发送text / html,当它包含在src =“”
  • 时发送image / jpeg(图像内容类型)

因此,如果浏览器从src =“”查询服务器,则会发送良好的内容类型。如果broswer继续图像url它会发送text / html,application / html + xml等...

如果用户执行“另存为”命令,任何人都知道如何使水印发生?

由于

1 个答案:

答案 0 :(得分:0)

上面提到的最优雅的解决方案是在图像上创建一个不太高(并且将隐藏水印)的框,之前已经生成了(当上传图片时)。

这样,CSS会隐藏图片下方的白框,当有人使用“另存为”时,框就在那里。服务器上没有使用任何资源。

这是基于我开发的浏览器标题的解决方案。不要使用“另存为”,但可以直接访问图片和src =“”

    <?php
    #...

    # Require PHP to work as a module in apache
    $SentHeaders = apache_request_headers();
    #$Watermark = strpos($SentHeaders['Accept'], 'text');
    $Watermark = preg_match_all('/text/', $SentHeaders['Accept'], $matches);

    # Set the header
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
    header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0', false);
    header('Pragma: no-cache'); 

    # HHeader required
    ($Image->ContentType) ? header('Content-Type: '.$Image->ContentType) : header('Location: /404');

    # Accès direct / save as
    if($Watermark){
        # Direct Image Access
        #...
    } else {
        # Image included in src=""
        #...
    }
    #...
    ?>