将二进制字符串解释为Python中的图像,由Javascript本地方法生成
Interpret binary string as image in Python, generated by Javascript native method
var oReq = new XMLHttpRequest();
var reader = new FileReader();
reader.onload = function(e) {
var rawData = reader.result;
oReq.open("POST", '/upload', true);
oReq.send(rawData);
console.log(rawData);
}
reader.readAsBinaryString(postObj);
// postObj is an image who's src is set to a data uri, taken via a webcam.
console.log(rawData) yield ==>
"PNG
IHDRÈÜÇ IDATx^d½idizw"##rϬ}ëîªÞfÃ!%2
ø£üølpµ0ù Q&É©¡,Ú2l²!æSeÃ$Y-ÉÎLïKuí{îáëºófe³§¦*3#Nó¾Ïr?÷³¼úOþÓùÉ tóne¸Øm.»ÙhÐtÃÅQ7<w''³nοg³Y·Èkóãn<Xì§G]·²Ø
ç]·8wÇ'å¨;á5vÁ°Ì»E¾?æ÷ywtÒuó¯ù{>Ïám]ÇëF£Qwt|'ßó5ä³NæÜÇ°^{r¿ùÜÁ|¡;>:êón0âß¼gûã6rm_ëgçõü4[vG¼gaa!?_à5#~³0'èxcß}Â}ú|ÜÓóóÅ!Ï=?â{®ã½ó^í½v'ü×úþÞ/×ñÏ}P®}Â÷ݸ;9fX¨?[àUÇ|?à^|þáb=çòɸ[æ·¬@7q]>giÜqÓ~@oq´èMdY4í3-.ùÈzÿü̺Íy
7Ľֺؿ'Ü6¯õ:Ü ß·5r-|ºv½½ôú¬w¶ìõáþ<{/íuí{ÞÎÚy¯Gì%kÎ}NfÓÚÞã5ݶÏÞÔr×
ø«Õッk¯õï</ëïçz¬ïso§ÙsƳü5öß»{ÛÝádÌñö ïgÍÿù¿üWÝƹÝøüX7øK?ùó ê¶/!Ë«ÝÂxÔ"
G.²Éxbæ]ñg@úýgé£Þ;¿ThƳ/ùòû(D¿Ã>2Þ-ð³7¯18"P<=ç>GSr±;r'à;³°<6ÎòZNAázndûûtù¼1ÇVGÁ¼^vܼ'3ÚÆu¸9×g]ÉñA V°0óîÍ£TÃY½ïdaM">ÆhÎF9ú¿](3¯¢xeÜõt
¢DÞN¾E¾oÈEy×q®?ÂÀ»z=Bó|,¯JáæzíýÞ¯ÿöï&äM!rϼWóQÛ^ÏÛÖ5÷ܤûåϸÛüûÃkôF©]ß¿óÜ1F¤üNëÍsM¯Qü²úYX:f¯DSßÌõ4D1eTÛûüvÿþlrpÐM'SÇuòµÈïù?øî½>è~â'~¢ü$
我如何在Python中解释这个?在服务器上,这些数据显示为:
'...'x7f'xc2'xb4r'xc2'x87'x1c'xc2'xaa'n-'xc2'x9c'xc2'xa6QF'xc2'xac'xc2'xb0tS'xc3'xa4'xc2'xb0;'xc3'x8cisL@'xc3'x98'xc2'x94E'xc3'x94'xc2'xb8Bz'xc3'xb0'xc3'xa9'xc2'xaa#8'xc2'x90'xc3'xbb'xc3'xa5>'xc3'xbaO'xc2'xa8'xc3'x81H'xc3'x91'xc2'xaf:i'xc2'x8a'xc2'x926'xc2'x8b'xc2'x81'xc3'xbc'xc3'xa1Y'xc3'x93'xc2'x9b'xc2'xbat'xc2'x8f'xc3'x9e~'xc2'xa3PH4'x02_'x04'xc2'xbf'xc2'x92'xc2'xb7'xc3'xad'xc2'x8f'xc3'x9e'xc3'xbf'xc2'xb8<'xc2'x91V'xc3'xa0'xc3'x8b'x1f'xc3'x88'xc3'x9f'xc2'xa2>)'x1d'xc3'x94eY='xc3'x8ct'xc2'xa9+L^7'xc2'xa2I'xc3'x84'xc2'xba'x03'xc3'xb5!1f'xc3'x97'xc3'x81'xc3'xbfD'xc3'x87'xc3'xb7'x06'xc2'xaa'xc3'xafcz'xc3'xad('xc3'xb5'xc2'xab'xc3'x96'xc3'xb5<'xc3'x8e'xc2'xab'x08'xc3'x81'xc2'x88'x0b'xc3'x8a;'xc3'x8e!v'xc3'x84'xc2'xb1?'xc2'x8bVn'x19t'xc3'x80'xc2'x8bT`:'x1c'xc3'x8b'xc2'x99'xc3'xb2'xc3'x9c'xc3'xbf'x0fCsXi'xc3'xa6z'xc3'xb3l'x00'x00'x00'x00IEND'xc2'xaeB`'xc2'x82'
将此以PNG格式写入文件将生成无效的PNG。任何关于保存图片的指导都会很有帮助。
您需要在上传之前将图像的二进制表示转换为Base64
-这使得通过HTTP传输数据时可以安全使用。
当您在服务器端收到Base64
编码的图像时,您可以将其转换回二进制,并将其写入文件。
客户端代码:
要转换为Base64
,需要使用
fileReader.readAsDataURL( fileObject )
这自动表示您的数据在一个安全的通过HTTP格式上传。
服务器端代码:
import base64
coded_string = '''Q5YACgA...'''
binary = base64.b64decode(coded_string)
# now write binary to file...
open('/path/to/new_file.png', 'wb').write(rawData)
浏览器:
// Client Side:
var xhr = new XMLHttpRequest();
xhr.open('POST', uploadUrl);
xhr.send(base64EncodedItem);
在服务器上(我使用Flask/Python 2.x)
# Server Side:
import re
import uuid
# Obtain the base64 string
image_string = request.data
image_string = re.search(r'base64,(.*)', image_string).group(1)
# Generate a file name.
# We can assume PNG format in my specific implementation, but you could search
# the image_string variable to detect filetype.
output = open(str(uuid.uuid4()) + '.png', 'wb')
output.write(image_string.decode('base64'))
output.close()
这对我有用。
相关文章:
- 使用“;这个“;JavaScript原型方法中的关键字
- 使用Objective-C的JavaScript注入方法
- JavaScript”;.方法“;返回undefined
- javascript eval方法语法
- javascript Ajax方法在不同的浏览器中有不同的结果
- html视频javascript播放方法在移动Safari中不起作用
- 用于数组原型的JavaScript独特方法
- Javascript find 方法在第一次匹配后不会停止
- Javascript 对象方法不更新变量
- 如何理解“当类实例化时,JavaScript静态方法也是不可调用的”
- 在java实现中寻找javascript md5方法
- 面向对象的 JavaScript 共享方法变量
- Javascript CharAt 方法不适用于字符串
- 将php post数据传递给javascript的方法
- 为什么javascript替换方法(没有regex)在angularjs表达式中不起作用来删除 
- 实现JavaScript内部方法的源代码
- 从JavaScript调用C#方法
- 使用JavaScript拦截方法调用参数
- 我无法准确地理解JavaScript的方法string.match(regexp)的g标志是如何工作的
- 如何最好地覆盖Javascript对象方法