1

我想动态创建图像并将其上传到文件夹。我将从用户选择中动态获取身体、袖子、衣领和袖口的图像。我正在合并所有这些图像以创建一个新图像,并将这个新图像上传到一个文件夹中。我无法将文件名上传到文件夹,也没有显示错误,但能够生成合并图像。

下面是代码,

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

3 回答 3

0

您正在使用imagepng(),将文件保存到您提供的特定位置。

语法imagepng()

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

where$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

于 2017-06-02T13:18:27.287 回答
0

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);
于 2017-06-02T13:19:31.847 回答
-2

您应该尝试使用 file_put_contents 而不是 move_uploaded_file。

file_put_contents('you_file_location/filename', IMAGE_OBJECT_HERE);

或者您也可以使用 fwrite 功能保存文件。

于 2017-06-02T13:10:45.503 回答