Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用imagejpeg循环创建多个图像_Php_Loops_Foreach - Fatal编程技术网

Php 使用imagejpeg循环创建多个图像

Php 使用imagejpeg循环创建多个图像,php,loops,foreach,Php,Loops,Foreach,我正在构建下面的循环,以使用现有图像生成多个图像,并从用户输入的表单字段收集文本。其中一个变量是通过解析带有名称的csv文件而生成的数组 我遇到的问题是,代码只输出第一个图像,而不输出任何其他图像。该数组有9个值,但该值可以根据用户的csv进行更改 <?php $school = $_POST["school"]; $educator1 = $_POST["educator1"]; $educator2 = $_POST["educator2"]; $students = $_F

我正在构建下面的循环,以使用现有图像生成多个图像,并从用户输入的表单字段收集文本。其中一个变量是通过解析带有名称的csv文件而生成的数组

我遇到的问题是,代码只输出第一个图像,而不输出任何其他图像。该数组有9个值,但该值可以根据用户的csv进行更改

<?php
$school = $_POST["school"];
$educator1 = $_POST["educator1"];
$educator2 = $_POST["educator2"];     
$students = $_FILES["csv"]["tmp_name"];
$csvAsArray = array_map("str_getcsv", file($students));

foreach ($csvAsArray as $value) {

    //Set the Content Type
    header('Content-type: image/jpeg');

    // Create Image From Existing File
    $jpg_image = imagecreatefromjpeg('certificate.jpg');

    // Allocate A Color For The Text
    $black = imagecolorallocate($jpg_image, 0, 0, 0);
    $grey = imagecolorallocate($jpg_image, 63, 63, 63);

    // Set Path to Font File
    $font_path = 'GothamRounded-Bold.otf';

    // Print Text On Image
    imagettftext($jpg_image, 90, 0, 90, 920, $black, $font_path, $value[0]);
    imagettftext($jpg_image, 50, 0, 850, 1120, $black, $font_path, $school);
    imagettftext($jpg_image, 50, 0, 90, 1480, $grey, $font_path, $educator1);
    imagettftext($jpg_image, 50, 0, 1050, 1475, $grey, $font_path, $educator2);

    // Send Image to Browser
    // $name = $value[0] .'.jpg';
    imagejpeg($jpg_image);   

    // Clear Memory
    imagedestroy($jpg_image);
}

用这种方法不能同时返回多个图像。以下是我可以向您建议的选项:

  • 将它们全部打包到zip或其他文件中,然后作为单个文件返回
  • 将它们粘在一起并作为一张图片返回
  • 将它们保存在服务器上的公共目录中,并提供直接链接以响应最终用户的请求

  • 您不能像这样显示多个图像,因为您直接将新生成的图像发送到浏览器。相反,您需要将所有这些图像分别保存到一个文件中,并通过链接在浏览器中访问它们以显示它们。这正是我所怀疑的,但我尝试使用以下代码,但它不起作用$name=$value[0]。.jpg';imagejpeg($jpg_image,$name);我喜欢选项#3,但有什么原因我不能使用imagejpeg函数来实现这一点吗?我正在使用此代码,但它似乎不起作用。imagejpeg($jpg_image,$name);好吧,让我们找出问题所在。你有什么错误吗?你的tmp文件目录是什么?您可以使用
    sys\u get\u temp\u dir()
    函数进行检查。请看这里的文档。或者直接在您的
    php.ini
    配置文件中(应该类似于
    upload\u tmp\u dir
    ,只需通过“tmp”搜索即可)。我在浏览器页面上没有发现php错误。只是一个空白的页面,中间有一个问号,我想这意味着它认为图像可以到那里去。php.ini文件显示temp files dir为/Applications/XAMPP/xamppfiles/temp/,因为我在本地运行它。您是否检查了这个tmp文件夹中创建的图像?另外,请检查包含可执行php文件的文件夹。另一件事是,您必须删除
    标题('Content-type:image/jpeg')在这种情况下。只有当您的响应正文包含图像数据时才需要它。我想这就是为什么您有这个questinon标记的原因,因为标题。
    
    $name = $value[0] .'.jpg';    
    imagejpeg($jpg_image, $name);