Python - PHP 将base64保存为图片

0 投票
2 回答
842 浏览
提问于 2025-04-19 07:43

大家好。有人能帮我解决我的问题吗?我刚开始学习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()

撰写回答