PHP Добавить текст к изображению и сохранить

#php #php-gd

#php #php-gd

Вопрос:

Я пытаюсь заставить PHP-файл добавить идентификатор к загруженному изображению и повторно сохранить изображение. По какой-то причине приведенный ниже код не работает, хотя он очень похож на другие примеры, которые я нашел в Интернете. Что я делаю не так?

     $productStyle = isset($_POST['productStyle']) ? encodechars($_POST['productStyle']) : "";
    $productSize = isset($_POST['productSize']) ? encodechars($_POST['productSize']) : "";
    $itemID = isset($_POST['itemID']) ? encodechars($_POST['itemID']) : "";

    if ($productStyle!=""){
        $fileLocation ='/home/abcdefg/public_html/uploads/'.$productStyle;
        $photoLoc = $fileLocation . "/" . $itemID.".png";
        if(!is_dir($fileLocation)) {
            mkdir($fileLocation , 0777); //create directory if it doesn't exist
        }

        //add id to image
        $im = imagecreatefrompng($_FILES["file"]["tmp_name"]);
        $font = 'Verdana.ttf';  //<-- this file is included in directory
        $grey = imagecolorallocate($im, 128, 128, 128);
        imagettftext($im, 10, 0, 11, 20, $grey, $font, $itemID);

        imagepng($im, $photoLoc);  //<-- This does not work
        imagedestroy($im);   

        //move_uploaded_file($_FILES["file"]["tmp_name"], $photoLoc);  //<-- This will move the file to the correct folder but without the text added 

    }
  

Комментарии:

1. Вы проверили журналы ошибок?

2. Проверка ошибок отсутствует. Вы предполагаете, что каталог существует и файл доступен для записи…

3. @HalfCrazed Работает команда move_upload_file, которая указывает на то же местоположение $ photoLoc, поэтому я предположил, что это не проблема с разрешением.

4. Это довольно опасно предполагать — там много вариативности! Посмотрите, можете ли вы вывести PNG в браузер, опустив 2-й аргумент (не забудьте сначала задать тип содержимого заголовка), просто чтобы посмотреть, отображается ли изображение так, как вы ожидали.

Ответ №1:

сначала переместите исходный файл, а затем удалите после добавления водяных знаков.

 $productStyle = isset($_POST['productStyle']) ? encodechars($_POST['productStyle']) : "";
$productSize = isset($_POST['productSize']) ? encodechars($_POST['productSize']) : "";
$itemID = isset($_POST['itemID']) ? encodechars($_POST['itemID']) : "";

if ($productStyle!=""){
    $fileLocation ='/home/abcdefg/public_html/uploads/'.$productStyle;
    $photoLoc = $fileLocation . "/" . $_FILES["file"]["name"];
    move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
    if(!is_dir($fileLocation)) {
        mkdir($fileLocation , 0777); //create directory if it doesn't exist
    }

    //add id to image
    $im = imagecreatefrompng($photoLoc);
    $font = 'Verdana.ttf';  //<-- this file is included in directory
    $grey = imagecolorallocate($im, 128, 128, 128);
    imagettftext($im, 10, 0, 11, 20, $grey, $font, $itemID);

    imagepng($im, $photoLoc);  //<-- This does not work
    imagedestroy($im);   
    unlink($photoLoc);
    //move_uploaded_file($_FILES["file"]["tmp_name"], $photoLoc);  //<-- This will move the file to the correct folder but without the text added 

} 
  

или просто изменить

 $im = imagecreatefrompng($_FILES["file"]["tmp_name"]);
  

Для

 $im = imagecreatefrompng($_FILES["file"]["name"]);