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

エラーはそれをすべて説明しています:

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

HTTP ラッパー (URI でプロトコルを使用できるようにする PHP の一部http://) は、Web アドレスに書き込むことができません。ただし、これは理にかなっています。誰かがこれを実行できると想像してみてください。

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

そしてグーグルを乗っ取り!

ファイルをリモート Web サーバーに保存するには、FTP、SFTP などを使用してそのファイル システムにアクセスする必要があります。PHP にはFTP とのインターフェース用のビルトインがあります。

ただし、変更しようとしているファイルは、この PHP スクリプトを実行しているサーバー上にあると思われます。その場合、/var/www/images/image.jpgの Web アドレス ( http://www.yoursite.com/images/image.jpg) ではなく、サーバー上のファイルへのパス ( のようなものかもしれません) を使用する必要がありますfile_put_contents()

于 2013-06-18T10:44:19.903 に答える
2

あなたは試すことができます:

imagejpeg($im, $img_path); 

imagejpeg()次のように記述されるファイル名引数を取ります。

ファイルを保存するパス。設定されていないか NULL の場合、生の画像ストリームが直接出力されます。

ただし、別のユーザーが言及したように、ファイルをリモートサーバーに保存しようとしている場合は、別の方法で保存する必要があります。1 つの方法は、PHP の FTP 関数を使用することです: http://www.php.net/manual/en/ftp.examples-basic.php

于 2013-06-18T10:37:58.067 に答える