2013-06-18 5 views
1

Привет, я использую следующий скрипт, и он отлично работает.PHP - сохранение водяного знака в каталог

Моя проблема заключается в том, как заменить исходное изображение водяным знаком, оставляя одно и то же имя файла и расширение?

$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); 

I судимое:

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

Вы можете попробовать:

imagejpeg($im, $img_path); 

imagejpeg() принимает имя файла аргумент, который описан как:

The path to save the file to. If not set or NULL, the raw image stream will be outputted directly.

Однако как другой пользователь упомянул - если вы пытаетесь для сохранения файла на удаленном сервере, вам придется сделать это по-другому. Один из методов может быть с помощью FTP функций РНР: http://www.php.net/manual/en/ftp.examples-basic.php

+0

ok itryed imagejpeg(), поскольку оригинал - это jpg для замены. проблема заключается в том, что http не позволяет отключить и кажется, что путь, переданный в imagejpeg(), не нормально, пока он подходит для водяных знаков:/i received: ** imagejpeg() [function.imagejpeg]: Не удалось открыть 'http: // localhost/site/uploads/img/iphone.jpg 'для записи: нет такого файла или каталога ** – sbaaaang

+0

Вы уверены, что это правильный URL? В сообщении об ошибке говорится, что путь не существует. Получаете ли вы какие-либо другие ошибки или предупреждения в вашем журнале ошибок php? – Joe

+0

yah путь абсолютно правильный :(и я предоставил 777 доступ только для тестирования :( – sbaaaang

2

Ну ошибка объясняет все:

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

HTTP-обертка (часть PHP, что позволяет использовать http:// протоколы URIs) не может писать в Интернете адрес. Это имеет смысл, однако, потому что представьте, может ли кто-то просто запустить это:

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

И захват google!

Чтобы сохранить файл на удаленном веб-сервере, вам необходимо получить доступ к его файловой системе с помощью FTP, SFTP и т. П. PHP имеет встроенные функции для interfacing with FTP.

Однако я подозреваю, что файл, который вы пытаетесь изменить, находится на сервере, с которого выполняется этот скрипт PHP. В этом случае вам нужно использовать путь к файлу на сервере (это может быть что-то вроде /var/www/images/image.jpg), а не адрес (http://www.yoursite.com/images/image.jpg) в file_put_contents().

+0

i tryed: ** file_put_contents ('./ uploads/img/iphone.jpg', imagejpeg ($ im)); ** он заменяет исходное имя с таким же именем и ext, но изображение теперь пуст: P – sbaaaang

+0

@badbetonbreakbutbedbackbone Это потому, что 'imagejpeg ($ im)' echos изображение вместо него возвращает (с одним аргументом он повторяет логическое значение для указания успех или неудача). Чтобы записать файл, передайте имя файла в качестве второго параметра: 'imagejpeg ($ im, './uploads/img/iphone.jpg')' –

+0

+1 ОК, вы спасли мне жизнь, извините, но я должен принять другую ответ парня, так как он сначала сказал, что использует imagepng(): P – sbaaaang

Смежные вопросы