如何将 imagejpeg() 与 $_FILES["file"]["tmp_name"] 一起使用
How do I use imagejpeg() with $_FILES["file"]["tmp_name"]
我的 TensorFlow 项目只接受 JPEG,因为这是我对其进行训练的依据。我使用 PHP 图片上传表单来 post 图片。下面是图像如何被 PHP 文件接收,然后在我的 Python 脚本中使用。
$uploaded_file = $_FILES["file"]["tmp_name"];
move_uploaded_file($_FILES["file"]["tmp_name"], "/tmp/classify-img");
$output = shell_exec("/usr/bin/python3 /var/www/html/classify.py /tmp/classify-img");
我过去曾使用 imagejpeg()
将任何图片文件扩展名转换为 .jpeg
当我尝试这个时,它就是行不通。
$uploaded_file = imagejpeg($_FILES["file"]["tmp_name"]);
move_uploaded_file($_FILES["file"]["tmp_name"], "/tmp/classify-img");
帮助我干得好。谢谢。
更新和工作代码
#move the uploaded file somewhere temporary
$uploaded_file = $_FILES["file"]["tmp_name"];
move_uploaded_file($_FILES["file"]["tmp_name"], "/tmp/classify-img");
#Is WEBP image?
if (exif_imagetype("/tmp/classify-img".$_FILES["tmp_name"]) == IMAGETYPE_WEBP) {
//create from webp temp image to be converted
$im = imagecreatefromwebp("/tmp/classify-img".$_FILES["tmp_name"]);
// Set the content type header - in this case image/jpeg
header('Content-Type: image/jpeg');
// Output the image
imagejpeg($im, "/tmp/classify-img".$_FILES["tmp_name"], 100);
}
$output = shell_exec("/usr/bin/python3 /var/www/html/classify.py /tmp/classify-img");
当您使用 $_FILES["tmp_name"]
时,问题如下评论中所述,当您使用 $_FILES["file"]["tmp_name"]
时,它会为您提供文件临时文件名,您会将 tmp/
部分添加到您的文件路径。
谢谢大家的帮助。未来的读者我希望这有助于解释临时文件如何使用 $_FILES 以及如何检查图片以及如何将其转换为 JPEG 而不将其保存到磁盘。
因为处理临时文件的常用方法是创建文件,打开它,然后 unlink/delete 它而不关闭句柄。这使您能够使用磁盘,同时确保进程结束时文件为 deleted/unlinked。这就是正在发生的事情,为什么 move_uploaded_file()
存在,以及为什么你 必须 在对该文件进行任何其他操作之前使用它。
还有一个附加层“你真的希望这个文件真的存在吗?”因为否则任何人都可以 POST 到任何 PHP 脚本并在文件系统中创建文件。
TLDR:您必须使用move_uploaded_file()
才能尝试使用该文件。
我的 TensorFlow 项目只接受 JPEG,因为这是我对其进行训练的依据。我使用 PHP 图片上传表单来 post 图片。下面是图像如何被 PHP 文件接收,然后在我的 Python 脚本中使用。
$uploaded_file = $_FILES["file"]["tmp_name"];
move_uploaded_file($_FILES["file"]["tmp_name"], "/tmp/classify-img");
$output = shell_exec("/usr/bin/python3 /var/www/html/classify.py /tmp/classify-img");
我过去曾使用 imagejpeg()
将任何图片文件扩展名转换为 .jpeg
当我尝试这个时,它就是行不通。
$uploaded_file = imagejpeg($_FILES["file"]["tmp_name"]);
move_uploaded_file($_FILES["file"]["tmp_name"], "/tmp/classify-img");
帮助我干得好。谢谢。
更新和工作代码
#move the uploaded file somewhere temporary
$uploaded_file = $_FILES["file"]["tmp_name"];
move_uploaded_file($_FILES["file"]["tmp_name"], "/tmp/classify-img");
#Is WEBP image?
if (exif_imagetype("/tmp/classify-img".$_FILES["tmp_name"]) == IMAGETYPE_WEBP) {
//create from webp temp image to be converted
$im = imagecreatefromwebp("/tmp/classify-img".$_FILES["tmp_name"]);
// Set the content type header - in this case image/jpeg
header('Content-Type: image/jpeg');
// Output the image
imagejpeg($im, "/tmp/classify-img".$_FILES["tmp_name"], 100);
}
$output = shell_exec("/usr/bin/python3 /var/www/html/classify.py /tmp/classify-img");
当您使用 $_FILES["tmp_name"]
时,问题如下评论中所述,当您使用 $_FILES["file"]["tmp_name"]
时,它会为您提供文件临时文件名,您会将 tmp/
部分添加到您的文件路径。
谢谢大家的帮助。未来的读者我希望这有助于解释临时文件如何使用 $_FILES 以及如何检查图片以及如何将其转换为 JPEG 而不将其保存到磁盘。
因为处理临时文件的常用方法是创建文件,打开它,然后 unlink/delete 它而不关闭句柄。这使您能够使用磁盘,同时确保进程结束时文件为 deleted/unlinked。这就是正在发生的事情,为什么 move_uploaded_file()
存在,以及为什么你 必须 在对该文件进行任何其他操作之前使用它。
还有一个附加层“你真的希望这个文件真的存在吗?”因为否则任何人都可以 POST 到任何 PHP 脚本并在文件系统中创建文件。
TLDR:您必须使用move_uploaded_file()
才能尝试使用该文件。