Php 使用imagejpeg循环创建多个图像
我正在构建下面的循环,以使用现有图像生成多个图像,并从用户输入的表单字段收集文本。其中一个变量是通过解析带有名称的csv文件而生成的数组 我遇到的问题是,代码只输出第一个图像,而不输出任何其他图像。该数组有9个值,但该值可以根据用户的csv进行更改Php 使用imagejpeg循环创建多个图像,php,loops,foreach,Php,Loops,Foreach,我正在构建下面的循环,以使用现有图像生成多个图像,并从用户输入的表单字段收集文本。其中一个变量是通过解析带有名称的csv文件而生成的数组 我遇到的问题是,代码只输出第一个图像,而不输出任何其他图像。该数组有9个值,但该值可以根据用户的csv进行更改 <?php $school = $_POST["school"]; $educator1 = $_POST["educator1"]; $educator2 = $_POST["educator2"]; $students = $_F
<?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);
}
用这种方法不能同时返回多个图像。以下是我可以向您建议的选项:
您不能像这样显示多个图像,因为您直接将新生成的图像发送到浏览器。相反,您需要将所有这些图像分别保存到一个文件中,并通过链接在浏览器中访问它们以显示它们。这正是我所怀疑的,但我尝试使用以下代码,但它不起作用$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);