Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 水印png持续显示当前URL_Php_Gd - Fatal编程技术网

Php 水印png持续显示当前URL

Php 水印png持续显示当前URL,php,gd,Php,Gd,我正在编写一个脚本,在用户上传的图像上添加水印。因为每个用户都希望自己的图片上有自己的用户名,所以我决定先用用户名制作一个透明的PNG。之后,我使用一种简单的水印技术将PNG和上传的文件合并在一起 我让脚本工作,但每次创建PNG时它都会显示我的当前地址 这是迄今为止的代码: <?php session_start(); $username = $_SESSION['login']; $filename = "watermarks/$username.png";

我正在编写一个脚本,在用户上传的图像上添加水印。因为每个用户都希望自己的图片上有自己的用户名,所以我决定先用用户名制作一个透明的PNG。之后,我使用一种简单的水印技术将PNG和上传的文件合并在一起

我让脚本工作,但每次创建PNG时它都会显示我的当前地址

这是迄今为止的代码:

 <?php
    session_start();

    $username = $_SESSION['login'];
    $filename = "watermarks/$username.png";

    if (file_exists($filename)) {
        exit;
    } elseif ($filename == "undefined") {
        exit;
    }else{


    header("Content-type: image/png"); //Picture Format
    header("Expires: Mon, 01 Jul 2003 00:00:00 GMT"); // Past date
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // Consitnuously modified
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Pragma: no-cache"); // NO CACHE

    /*image generation code*/
    //create Image of size 350px x 75px
    $bg = imagecreatetruecolor(500, 100);

    //This will make it transparent
    imagesavealpha($bg, true);

    $trans_colour = imagecolorallocatealpha($bg, 0, 0, 0, 127);
    imagefill($bg, 0, 0, $trans_colour);

    //Text to be written
    $text = $username;

    // White text
    $white = imagecolorallocate($bg, 255, 255, 255);
    // Grey Text
    $grey = imagecolorallocate($bg, 128, 128, 128);
    // Black Text
    $black = imagecolorallocate($bg, 0,0,0);

    $font = 'fonts/LiberationSans.ttf'; //path to font you want to use
    $fontsize = 20; //size of font


    //Writes text to the image using fonts using FreeType 2
    imagettftext($bg, $fontsize, 0, 125, 50, $black, $font, $text);

    imagettftext($bg, $fontsize, 0, 127, 52, $white, $font, $text);




    //Create image
    header( "Content-type: image/png" );
    //imagepng($bg);

    $save = $filename;
    imagepng($bg, $save, 0, NULL);


    //destroy image
    imagedestroy($bg);

    }
    ?>

我肯定我错过了什么,但我不知道是什么

我的第二个问题是,我不知道如何使文本居中,并消除文本周围的空白。

请下载图片来了解我的意思


提前感谢您的帮助。

您没有输出图像。当标题指示图像时,大多数浏览器只显示当前url,但不发送数据

注意您是如何为
imagepng()
提供文件名的?如果您阅读了上面的PHP手册,它会在没有要保存的文件名时输出图像,或者将图像保存到指定的文件名

您需要删除
$bg
之后的所有参数以输出图像,或者删除
imagedestroy($bg)之后的所有参数
您需要在
$save
处打开输出文件并重新输出

类似于以下内容的内容将文件流式传输到输出:

<?php
$fp = fopen($save, 'r');
while(!feof($fp)) {
    print fread($fp, 1024);
    ob_flush();
    flush();
}
fclose($fp);

您没有输出图像。当标题指示图像时,大多数浏览器只显示当前url,但不发送数据

注意您是如何为
imagepng()
提供文件名的?如果您阅读了上面的PHP手册,它会在没有要保存的文件名时输出图像,或者将图像保存到指定的文件名

您需要删除
$bg
之后的所有参数以输出图像,或者删除
imagedestroy($bg)之后的所有参数
您需要在
$save
处打开输出文件并重新输出

类似于以下内容的内容将文件流式传输到输出:

<?php
$fp = fopen($save, 'r');
while(!feof($fp)) {
    print fread($fp, 1024);
    ob_flush();
    flush();
}
fclose($fp);

imagecopy($image,$watermark,($w/2)-($ww/2)),$h-$wh,0,0,$ww,$wh)

用于使水印居中

参考此

imagecopy($image,$watermark,($w/2)-($ww/2)),$h-$wh,0,0,$ww,$wh)

用于使水印居中

参考此


您确定要删除不正确的图像吗?我看到脚本只是在现有图像上退出,而且不正确的图像可能在缓存中。对于居中,您需要使用imagettfbbox获取文本的尺寸,并使用这些值确定位置。。(图像的1/2宽度)-(文本的1/2宽度)=图像上文本的起始位置。确实要删除错误的图像吗?我看到脚本只是在现有图像上退出,而且不正确的图像可能在缓存中。对于居中,您需要使用imagettfbbox获取文本的尺寸,并使用这些值确定位置。。(1/2图像宽度)-(1/2文本宽度)=文本在图像上的起始位置。
imagepng($bg,NULL)
也将具有与
imagepng($bg)
相同的效果,因此通过使用
NULL
而不是文件名,您还可以使用其他参数(压缩和过滤器)。谢谢大家的帮助。我需要在不向用户显示的情况下将图像保存在后台。我想我会给他看画廊页面上的水印,问题就解决了。再次感谢
imagepng($bg,NULL)
也将具有与
imagepng($bg)
相同的效果,因此通过使用
NULL
而不是文件名,您还可以使用其他参数(压缩和过滤器)。谢谢大家的帮助。我需要在不向用户显示的情况下将图像保存在后台。我想我会给他看画廊页面上的水印,问题就解决了。再次感谢!