Создание образа Php и загрузка в папку

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

Ниже приведен код,

    <?php
$body = "img1.jpg";
$sleeve = "img2.jpg";
$collar = "img3.jpg";
$cuff = "img4.jpg";
$outputImage = imagecreatetruecolor(800, 800);

$background = imagecolorallocate($outputImage, 0, 0, 0);
imagecolortransparent($outputImage, $background);

$white = imagecolorallocate($outputImage, 255, 255, 255);
imagefill($outputImage, 0, 0, $white);

$first = imagecreatefrompng($body);
$second = imagecreatefrompng($sleeve);
$third = imagecreatefrompng($collar);
$fourth = imagecreatefrompng($cuff);

imagecopyresized($outputImage,$first,0,0,0,0,600,600,600,600);
imagecopyresized($outputImage,$second,0,0,0,0,600,600,600,600);
imagecopyresized($outputImage,$third,0,0,0,0, 600, 600, 600, 600);
imagecopyresized($outputImage,$fourth,0,0,0,0,600,600,600,600);

$filename = round(microtime(true)).'.png';

imagepng($outputImage, $filename);
define('DIR_IMAGE', '/opt/lampp/htdocs/dutees/image/design-uploads/');

$ret = move_uploaded_file($filename, DIR_IMAGE.$filename);
print_r(error_get_last());
if($ret)
{
echo "success";die;
}
else
{
echo "fail";die;
}
imagedestroy($outputImage);
?>echo "fail";die;
}
imagedestroy($outputImage);
?>

1

Решение

move_uploaded_file не будет работать на $filename потому что это не загруженный файл — он был просто создан вашим кодом.

Попробуйте переключить две строки (как показано ниже) и добавить свой путь:

define('DIR_IMAGE', '/opt/lampp/htdocs/dutees/image/design-uploads/');
imagepng($outputImage, DIR_IMAGE . $filename);

И удалить move_uploaded_file линия:

//$ret = move_uploaded_file($filename, DIR_IMAGE.$filename);
0

Другие решения

ты используешь imagepng(), Это сохраняет файл в определенное место, которое вы предоставляете.

Синтаксис для imagepng() :

bool imagepng ( resource $image [, mixed $to [, int $quality [, int $filters ]]] )

где $to относится к месту, где вы хотите сохранить изображение (включая имя файла).

Так что вместо

$filename = round(microtime(true)).'.png';

imagepng($outputImage, $filename);
define('DIR_IMAGE', '/opt/lampp/htdocs/dutees/image/design-uploads/');

$ret = move_uploaded_file($filename, DIR_IMAGE.$filename);

Попробуй это,

$filename = round(microtime(true)).'.png';
define('DIR_IMAGE', '/opt/lampp/htdocs/dutees/image/design-uploads/');
imagepng($outputImage, DIR_IMAGE.$filename);

Вам не нужно move_uploaded_file() больше, потому что созданное изображение уже находится на вашем сервере.
У меня также была похожая проблема при создании captcha для новых пользователей, и это решение сработало.

0

Вы должны попробовать file_put_contents вместо move_uploaded_file.

file_put_contents('you_file_location/filename', IMAGE_OBJECT_HERE);

или вы также можете сохранить файл с помощью функции fwrite.

-2
По вопросам рекламы [email protected]