您好,我正在使用以下脚本,它运行正常。
我的问题是,如何用带有水印的图像替换原始图像,保留相同的文件名和扩展名?
$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
答案 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()
)。