2015-05-03 1 views
3

Я пишу программу, в которой водяные знаки загружаются пользователями. После завершения слоирования imagePNG() выводит фотографию в браузер, но не сохраняет ее в каталоге. Пути все правильные, а права доступа к файлам изменены до 0755. Используя только первый параметр функции (imagePNG ($ image)), изображение выводится, однако, когда путь добавлен (imagePNG ($ image, "photo_uploads /". $ Album_name . "/")).PHP: imagePNG() не будет сохранять файл в каталог. Права доступа к файлам все правильно, все еще не работает

Код:

<?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); 
} 
?> 

Я попытался все решения для другого подобного вопроса. Функция продолжает выводить измененное изображение, если в качестве второго параметра не добавлен путь для сохранения.

+0

Нет сообщений об ошибках вообще? – DigitalDouble

+0

Нет. Изображение просто не выводит или не сохраняет в каталог –

ответ

1

Я не думаю, что ваш путь правильный каталог. Причина в том, что он должен либо сохранять файл, либо выводить его в браузер, а не оба. Если имя файла 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\"/>"; 
+0

Вы имеете в виду, что второй параметр не является каталогом для сохранения файла? Я был под впечатлением, что первый вывод изображения, а второй сохранен в указанную директорию. –

+0

это должно быть имя файла, а не путь – Misunderstood

+0

Благодарим за помощь. –