如何用PHP修改GLTF文件中images数组首个元素的URI并保存
PHP修改GLTF文件中指定纹理URI的方法
你的原有代码问题在于直接遍历了GLTF JSON的顶级节点(比如scenes、nodes、images这些),而目标元素实际在images子数组里,所以无法正确匹配到目标URI。以下是两种可行的修改方式:
方式一:通过数组索引直接修改(已知目标是第一个元素)
如果确定要修改的是images数组的第一个元素,直接通过索引定位最直接:
$jsonString = file_get_contents('jsonFile.gltf'); $data = json_decode($jsonString, true); // 定位到images数组的第一个元素(索引为0)并修改uri if (isset($data['images'][0])) { $data['images'][0]['uri'] = "textures/Another_baseColor.jpeg"; } $newJsonString = json_encode($data, JSON_PRETTY_PRINT); // 保持JSON格式可读性 file_put_contents('jsonFile.gltf', $newJsonString); echo "bitti";
方式二:遍历images数组匹配URI修改(不确定索引时使用)
如果不确定目标元素的索引,只知道要修改的URI值,可以遍历images数组查找匹配项:
$jsonString = file_get_contents('jsonFile.gltf'); $data = json_decode($jsonString, true); // 遍历images数组查找目标URI foreach ($data['images'] as $key => $image) { if ($image['uri'] === 'textures/CARA_A_baseColor.jpeg') { $data['images'][$key]['uri'] = "textures/Another_baseColor.jpeg"; break; // 找到目标后跳出循环,提升效率 } } $newJsonString = json_encode($data, JSON_PRETTY_PRINT); file_put_contents('jsonFile.gltf', $newJsonString); echo "bitti";
注意事项
- 使用
JSON_PRETTY_PRINT参数可以让生成的JSON保持缩进格式,避免原GLTF文件被压缩成一行,方便后续查看和编辑。 - 操作前建议备份原GLTF文件,防止修改出错导致文件损坏。
内容的提问来源于stack exchange,提问作者Anda İnteraktif
相关产品推荐
相关产品推荐

