Я пишу программу, которая водяные знаки пользователя загружены фотографии. После завершения наложения функция imagePNG () выводит фотографию в браузер, но не сохраняет ее в каталоге. Все пути правильны, а права доступа к файлу изменены на 0755. Используя только первый параметр функции (imagePNG ($ image)), выводится изображение, однако при добавлении пути (imagePNG ($ image, photo_uploads / «. $ Album_name) . «/»)).
Код:
<?php
session_start();
use PHPImageWorkshop\ImageWorkshop;
$album_length = $_SESSION['album_length'];
$extension_array = $_SESSION['extension_array'];
$album_name = $_SESSION['album_name'];
chmod("photo_uploads/" . $album_name . "/", 0777);
for($i = 0; $i < $album_length; $i++) {
$path = 'photo_uploads/' . $album_name . '/' . $i . $extension_array[$i];
// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefrompng('watermark.png');
//only works with png
$im = imagecreatefrompng($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');
$save = "photo_uploads/" . $album_name . "/";
imagePNG($im, $save);
imagedestroy($im);
}
?>
Я перепробовал все решения для другого подобного вопроса. Функция продолжает выводить измененное изображение, если путь для сохранения не добавлен в качестве второго параметра.
Я не думаю, что ваш путь правильный каталог. Причина в том, что он должен либо сохранять файл, либо выводить его в браузер, а не оба. Если имя файла равно NULL, оно будет выведено в браузер. Попробуйте использовать полное имя пути.
Имена файлов не заканчиваются косой чертой
Это не правильно
$save = "photo_uploads/" . $album_name . "/";
Это имеет больше шансов на работу:
imagePNG($im, $path);
Используйте полный путь:
/home/user/public_html/photo_uploads/something.png
Вот как я это делаю:
ob_start();
imagepng($newPic, NULL, 9);
$png = ob_get_clean();
ob_clean();
ob_end_flush();
$fp = fopen($filename ,"w");
fwrite($fp, $png);
fclose($fp);
Затем для вывода в браузер (в масштабе):
$base64 = base64_encode($png);
echo "<img width=\"$newWidth\" height=\"$newHeight\" src=\"data:image/png;base64,$base64\" alt =\"profile photo\"/>";
Других решений пока нет …