PHP8.3 使用 Gemini 接口怎么上传图片识别内容

浅萱吖_6531

浅萱吖_6531

2026-10-03

504人浏览

原创

php 8.3 无法直接上传图片调用 gemini api,因 gemini 不支持 multipart/form-data 文件上传;需将图片 base64 编码或上传至 gcs 后通过 uri 引用,再以 json payload 发送至 gemini 模型接口。

php8.3 使用 gemini 接口怎么上传图片识别内容

PHP 8.3 本身不能直接调用 Gemini API 上传图片识别内容,因为 Gemini API(由 Google 提供)目前不支持图片上传和多模态识别功能 —— 截至 2024 年底,Gemini 的官方 REST API(如 v1beta/models/gemini-pro-vision)已下线,gemini-1.5-pro 等模型虽支持图像输入,但仅限于通过 Google AI Studio 或 Vertex AI SDK,且要求图像以 base64 编码字符串或 Google Cloud Storage (GCS) URI 形式传入,不接受 multipart/form-data 文件上传。

确认你用的是 Gemini 的哪个接口

Google 目前提供两类主要接入方式,适用场景不同:

  • Google AI Studio(免费、简单):适合测试和轻量调用,支持 base64 图片,但有配额限制(每日约 60 次图像请求),不支持服务端长期部署;
  • Vertex AI(生产级、需 GCP 项目):需启用 Vertex AI API、授权服务账号、配置 IAM,支持 base64 和 GCS URI,可集成到 PHP 后端,但流程较重。

⚠️ 注意:没有 /upload 或 /vision 等独立上传接口,图片必须作为请求 payload 的一部分(base64)或引用(GCS),不是传统“文件上传”。

Gemini Image Remix
Gemini Image Remix

使用Gemini模型通过文本提示和多张输入图像生成或重新混合图像,支持多种风格、分辨率和高级模型选项。

下载

PHP 8.3 调用 Gemini(以 gemini-1.5-flash 为例)—— base64 方式

适用于小图(≤ 20MB,推荐 ≤ 4MB),需先将图片读取并编码:

  • 用 file_get_contents() 读取本地图片(确保 PHP 有读取权限);
  • 用 base64_encode() 编码为字符串;
  • 构造 JSON payload,按 Gemini 要求格式组织 contents 数组,含 parts(文本 + 图像 data);
  • 使用 cURL 或 file_get_contents() with stream context 发送 POST 请求,Header 必须含 Content-Type: application/json 和有效的 Authorization: Bearer YOUR_API_KEY。

示例关键代码片段:

$imagePath = '/path/to/photo.jpg';
$imageData = file_get_contents($imagePath);
$base64Image = base64_encode($imageData);

$payload = [
    'contents' => [[
        'parts' => [
            ['text' => '请描述这张图片的内容,用中文回答。'],
            ['inline_data' => [
                'mime_type' => 'image/jpeg',
                'data'      => $base64Image
            ]]
        ]
    ]],
];

$jsonPayload = json_encode($payload);
$apiKey = 'your_api_key_here'; // 来自 Google AI Studio 或 Vertex AI

$ch = curl_init('https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=' . $apiKey);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonPayload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json'
]);

$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);
if (isset($result['candidates'][0]['content']['parts'][0]['text'])) {
    echo $result['candidates'][0]['content']['parts'][0]['text'];
}

替代方案:用 GCS + Vertex AI(适合生产环境)

若图片较大或需高并发,推荐上传到 Google Cloud Storage,再把 gs://bucket-name/object.jpg URI 传给 Gemini:

  • 安装 google/cloud-storage Composer 包;
  • 用服务账号密钥初始化 StorageClient;
  • 上传图片到 GCS(设置公开读或让 Vertex AI 有访问权限);
  • 在 Gemini 请求中改用 file_data 字段,指定 file_uri 和 mime_type;
  • 注意:GCS bucket 需与 Vertex AI 所在区域兼容,且服务账号需有 roles/storage.objectViewer 权限。

常见问题提醒

  • API Key 安全:切勿硬编码或暴露在前端,应存于环境变量($_ENV['GEMINI_API_KEY'])或配置中心;
  • MIME 类型必须准确:JPEG 用 image/jpeg,PNG 用 image/png,错误会导致 400;
  • 响应结构嵌套深:结果在 $result['candidates'][0]['content']['parts'][0]['text'],需逐层判断是否存在;
  • 错误处理不可少:检查 HTTP 状态码、error 字段(如 429 配额超限、400 格式错误);
  • PHP 8.3 兼容性无问题:cURL、JSON、base64 等均为内置扩展,无需额外适配。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

9824

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

5861

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2075

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3668

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4354

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3411

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

4857

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

3802

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

11782

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
零基础新手入门PHP教程
零基础新手入门PHP教程

共237课时 | 48.9万人学习

新版php入门教程
新版php入门教程

共85课时 | 49.7万人学习

李炎恢PHP视频教程第一季
李炎恢PHP视频教程第一季

共136课时 | 61万人学习