PHP - 将水印图像保存到目录

时间:2013-06-18 10:32:23

标签: php image-processing gd

您好,我正在使用以下脚本,它运行正常。

我的问题是,如何用带有水印的图像替换原始图像,保留相同的文件名和扩展名?

$stamp = imagecreatefrompng(base_static_url().$this->marker_url);
$im = imagecreatefromjpeg($img_path);
// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// Copy the stamp image onto our photo using the margin offsets and the photo
// width to calculate positioning of the stamp.
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

// Output and free memory
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

我试过:

file_put_contents($img_path, imagecreatefromjpeg($im));

但得到了:

Error: failed to open stream: HTTP wrapper does not support writeable connections

我也尝试过:

file_put_contents($img_path, $im);

然后我收到了一个新错误:

Error: file_put_contents(): supplied resource is not a valid stream resource

2 个答案:

答案 0 :(得分:2)

你可以尝试:

imagejpeg($im, $img_path); 

imagejpeg()采用 filename 参数,该参数描述为:

  

将文件保存到的路径。如果未设置或为NULL,则原始图像流将直接输出。

然而,正如另一位用户所提到的 - 如果您尝试将文件保存到远程服务器,那么您将不得不以不同的方式执行此操作。一种方法可能是使用PHP的FTP功能:http://www.php.net/manual/en/ftp.examples-basic.php

答案 1 :(得分:2)

错误解释了这一切:

Error: failed to open stream: HTTP wrapper does not support writeable connections

HTTP包装器(允许您在URI中使用http://协议的PHP的一部分)无法写入Web地址。但这是有道理的,因为想象一下如果有人可以这样运行:

file_put_contents('http://google.com', '<!--malicious script-->');

接管谷歌!

要将文件保存到远程Web服务器,您需要使用FTP,SFTP等访问其文件系统。 PHP内置了interfacing with FTP

但是,我怀疑您尝试修改的文件位于执行此PHP脚本的服务器上。在这种情况下,您需要使用服务器上文件的路径(可能类似于/var/www/images/image.jpg),而不是http://www.yoursite.com/images/image.jpg中的网址(file_put_contents())。