REST API Base64图片 imagecreatefromstring():数据格式无法识别。

4
我正在开发一款REST API给Android应用使用。我希望能够将从应用程序发送的base64图像保存为jpeg格式的图像。我使用Laravel Intervention编写了相关代码并在Postman中进行了测试,没有任何问题。但是当数据来自于Android应用时,他们告诉我他们收到了500错误,并出现了以下消息:Image intervention - Image source not readable
之后我看到他们的JSON包含反斜杠和\n。因此,我尝试使用stripslashesstripcslashesutf8_encodeutf8_decode对它们进行转义,但都没有成功。
然后我放弃了Laravel Intervention并开始尝试使用imagecreatefromstring(gd)库。但是同样没有成功,出现了imagecreatefromstring(): Data is not in a recognized format的错误信息。
这是我的尝试结果。
<?php
$json_string = '{"id_city":2,"image":"UklGRpQEAABXRUJQVlA4IIgEAAAQGgCdASpyAHMAPxF+tlMsKCUiqxLrCYAiCWkRQAHDhsYwTe19\nO7uR07OS4zITzPgo\/k\/\/0J5nUNHFl64IOAxaccVoK1IldwGQzh87cuQK\/Qv6ruo6EARQuRqZXsI1\nT1a85ouI4ZYwKmvLwgnuBPnn\/HRLOOjc4GJZ2WzZhF5g+XbewWBxrDfIJEcLkLPeY8ebLZwDLcjY\nSUrgaaxHaTX1+xU8bcKt59iNx\/IMFYnpdDJvKcJwFW9rBRy\/U5DjRlo5ZQU7dKgqlxXmdu5MGOh2\n43RLSSEWILgAANfz4R4KgwnZHkZWDlHwIRGB+lbtcZ4Y4mWUjleS5JFM3KmrDaJ419MI2ZJJU\/7k\n0Z63mAmpzXw31PSx+S+HPbgOz8MxBGrN09TRKMLuJ5i5LMOQQXjtsd0idgm7djBK+5MW0EnFMuCg\nZqmSJN3GJlBDoiuUSOsJsG4iwgt3mUGcqCnlcEvqKoGoXcELjZz1mr+WCRvFdllVtLtbO3la0aKi\neKrWUJGpztH59Gub9ENSLdVbif\/ZqknZP4suXBmfEj\/aBRk13G0p+PfzPFi\/UIYaKp2E8IgRyQUY\nF+ORSC+8+BY2hvmdRlfGxk25HvsYvNj9LCiCCmwf2LY80yDOCfAES8\/Zbkcf4Sk6cWdWvZ97N2Z1\nGxIG3u\/ozL3dojnfpkFySQr1mEfzZRlK0xXRQ2uEi3A0Av6pDw\/Agti0lqVNunnw94R8jLYOrQ7M\n7vSphyGicy+oyO0K7cbUQMVFW3j\/oRJK4s8WUiekb1enKbO96EDDTzQCCdn31wG2hU\/gR5RFYK7u\nxbdqWs1lLp\/JBwrua\/v2Vj3TDXFV9a\/JuzdOWSkEa7K8TqU2AlP67mM6HM132Ywl3ia631jGli+I\nIc8bKGr94ntR134G\/hLmQ1u2yq\/v1D8JwXgtQ2IRDsZvd1Y5EguLtdUSpl6z55GkWo69GAKGaNqH\njxW9hEAnx5aiF\/MPCsn34TVQ5saH2w0nOHKASzvCpVSYVbWiGJwxu7WQxTJA0rfRtULzLM+mymOK\neZtoiI0lYiireQpXTu8feigMY48QIU5Xc1G\/xqHSeyS5\/Z5VIFdkJCp\/JWbzoDCY\/tPdXrNwAzHX\nq8VX9qJ+4z1iiqtqx3MokhP8IX63qfOitGKrI8TfqC2SPr4BY1udsJjsVyFJDrxPtOia6JaDY5Ve\nTKcH+gs9oGAAjYdNDqOWy6FQbNJWVc\/VFTrzqXP2RJ32K9DepoTj8pAujbvjBzOxaKakp1934e9E\nyNjxeDmSPCWD31mo0351iPMqyyC1k02PO0nCttrpqsgUrdXS9v0kLtpx+Dt9n5y3tgGd\/dXnQhrW\nEcamg0R4XQy2kVbQVo\/eAi5G+VZOpo1c6mBAbU9rl1JPZY2HJmfZI5EZAXTH2Idi9zSzSjcP4cT+\nTWBl1kfl\/v+cAFGUJj9vx2dhvpq7hhFBzZ9NmBHCdE8qEEpz7JkHCgVIR6SSOZoEg9CMS\/NEGm9w\nUDgX+FGlCdz94\/3XNLPbe\/kEpZ\/5C+QJJVAV27kOIl9IC8If9YGAAA==\n"}';

$data = json_decode($json_string);

var_dump($data->image);
// After copy and pasted the var_dump result to the postman it works

$base64_decoded = base64_decode($data->image);

imagecreatefromstring($base64_decoded);
?>

1
你的文件是webp格式,它是否能与imagecreatefromwebp一起使用? - Scuzzy
感谢 @Scuzzy。你真是太棒了。我花了两天时间来解决它,而你只用了一秒钟就修复了它。非常感谢。请将其作为答案发布。我可以点击绿色按钮。 - Ramesh Kithsiri HettiArachchi
imagecreatefromstring返回false时,您可以尝试使用imagecreatefromwebp,以便自动支持更多格式。我所做的第一件事是将您的base64编码内容写入磁盘,以查看它是什么类型的文件,然后再编写任何代码,而_irfanview_告诉我它被标记错误了。 - Scuzzy
1个回答

5

您的Base64编码数据实际上是一个.webp图像,但imagecreatefromstring()函数无法检测此编码。

修改为:

imagecreatefromstring(

致:

imagecreatefromwebp(

imagecreatefromwebp() 函数期望参数 1 是有效的路径,但传递了字符串。 - Sobin Augustine
@SobinAugustine 先将其写入临时文件:$file = tmpfile(); file_put_contents( $file, $string ); $image = imagecreatefromwebp ( $file ); - Scuzzy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接