1

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

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

$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
4

2 回答 2

2

你可以试试:

imagejpeg($im, $img_path); 

imagejpeg()接受一个文件名参数,描述为:

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

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

于 2013-06-18T10:37:58.067 回答
2

好吧,错误说明了一切:

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

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

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

并收购谷歌!

要将文件保存到远程 Web 服务器,您需要使用 FTP、SFTP 等访问其文件系统。PHP 具有与 FTP 交互的内置函数。

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

于 2013-06-18T10:44:19.903 回答