Python - PHP 将base64保存为图片
大家好。有人能帮我解决我的问题吗?我刚开始学习python和php。我想把一个经过base64编码的图片发送到我的php服务器。但是我不知道我的php脚本出了什么问题。
编码后的数据成功发送到php脚本,并且把新图片保存到了c:/image/newImage.jpg这个目录下。但是当我尝试预览newImage.jpg时,系统提示“Windows照片查看器无法打开这张图片,因为文件似乎已损坏、损坏或太大”。
我的问题是,如何才能正确保存这张图片。非常感谢大家的评论和建议。
抱歉我的英语不好。谢谢大家。
PHP脚本:
<?php
$encodedString = str_replace(' ','+',$_POST['test']);
$decoded=base64_decode($encodedString);
file_put_contents('c:/image/1/newImage.JPG',$decoded);
?>
Python脚本:
import urllib
import urllib2
from urllib import urlencode
url = 'http://192.168.5.165/server/php/try2.php'
encoded = urllib.quote(open("c:/image/1.jpg", "rb").read().encode("base64"))
data = {'test': encoded}
encoded_data = urlencode(data)
website = urllib2.urlopen(url, encoded_data)
print website.read()
2 个回答
0
我这个人比较懒,但我会帮你把这个改成PHP代码。
<?php
$encodedString = str_replace(' ','+',$_POST['test']);
$decoded=base64_decode($encodedString);
$decoded=imagecreatefromstring($decoded);
imagejpg($decoded, "temp.jpg");
copy("temp.jpg",'c:/image/1/newImage.JPG');
?>
问题很简单,你试图把一个还不是图片的对象保存到文件里。所以首先要生成一张图片,把它设置为临时图片,然后再把它复制到你想要放的地方。
0
在你的PHP代码中,你需要先用urldecode()
来处理$_POST['test']
里的数据,然后再用base64_decode()
进行解码。你不需要把空格替换成'+'(这其实是反向操作)。
在Python中,你只需要用urlencode()
,不需要同时使用urllib.quote()
。
所以你的PHP代码可以是:
<?php
$decoded = base64_decode(urldecode($_POST['test']));
file_put_contents('c:/image/1/newImage.JPG',$decoded);
?>
而你的Python代码可以是:
import urllib
import urllib2
from urllib import urlencode
url = 'http://192.168.5.165/server/php/try2.php'
encoded = open("c:/image/1.jpg", "rb").read().encode("base64")
data = {'test': encoded}
encoded_data = urlencode(data)
website = urllib2.urlopen(url, encoded_data)
print website.read()