Я хочу создать изображение динамически и загрузить его в папку. Я буду получать изображение для тела, рукава, воротника и манжеты динамически от выбора пользователя. Я объединяю все эти изображения, чтобы создать новое изображение и это новое изображение для загрузки в папку. Я не могу загрузить имя файла в папку, и при этом также не отображаются ошибки, но я могу создать объединенное изображение.
Ниже приведен код,
<?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);
?>
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);
ты используешь 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
для новых пользователей, и это решение сработало.
Вы должны попробовать file_put_contents вместо move_uploaded_file.
file_put_contents('you_file_location/filename', IMAGE_OBJECT_HERE);
или вы также можете сохранить файл с помощью функции fwrite.