python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别

摘要:
1.Python 2将base64数据写入图片,并将其转换为十六进制字符串importbinasciimg=u'R0lGODlhagAeAIcAAAAAAAAAAAAAAzABEABERABEiABEzACIACIRACiiiacizADMAADMiADMzADd3REQAAVQAAmQAA3QBVAABVQBMmQJ3QCZAACZTACZmQCT3QDdAADdS
1.python2将base64数据写成图片,并将数据转为16进制字符串的方法
import binascii

img = u'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABEAABERABEiABEzACIAACIRACIiACIzADMAADMRADMiADMzADd3REREQAAVQAAmQAA3QBVAABVVQBMmQBJ3QCZAACZTACZmQCT3QDdAADdSQDdkwDungDu7iIiIgAAZgAAqgAA7gBmAABmZgBVqgBP7gCqAACqVQCqqgCe7gDuAADuTwD/VQD/qgD//zMzMwAAdwAAuwAA/wB3AAB3dwBduwBV/wC7AAC7XQC7uwCq/wD/AEQAREQAiEQAzEREAEREREREiEREzESIAESIRESIiESIzETMAETMRETMiETMzEQAAFUAAFUAVUwAmUkA3VVVAFVVVUxMmUlJ3UyZAEyZTEyZmUmT3UndAEndSUndk0nd3U/u7mYAAGYAZlUAqk8A7mZmAGZmZlVVqk9P7lWqAFWqVVWqqk+e7k/uAE/uT0/unlX/qlX//3cAAHcAd10Au1UA/3d3AHd3d11du1VV/127AF27XV27u1Wq/1X/AFX/VYgAiIgAzIhEAIhERIhEiIhEzIiIAIiIRIiIiIiIzIjMAIjMRIjMiIjMzIgAAIgARJkATJkAmZMA3ZlMAJlMTJlMmZNJ3ZmZAJmZTJmZmZOT3ZPdAJPdSZPdk5Pd3ZkAAKoAAKoAVaoAqp4A7qpVAKpVVapVqp5P7qqqAKqqVaqqqp6e7p7uAJ7uT57unp7u7qr//7sAALsAXbsAu6oA/7tdALtdXbtdu6pV/7u7ALu7Xbu7u6qq/6r/AKr/Var/qswAzMxEAMxERMxEiMxEzMyIAMyIRMyIiMyIzMzMAMzMRMzMiMzMzMwAAMwARMwAiN0Ak90A3d1JAN1JSd1Jk91J3d2TAN2TSd2Tk92T3d3dAN3dSd3dk93d3d0AAN0ASe4AT+4Anu4A7u5PAO5PT+5Pnu5P7u6eAO6eT+6enu6e7u7uAO7uT+7unu7u7u4AAP8AAP8AVf8Aqv8A//9VAP9VVf9Vqv9V//+qAP+qVf+qqv+q////AP//Vf//qv///ywAAAAAagAeAAAI//8EDiRY0OBBhAkVLmTY0OFDiAVtTKQY0eJFjBkXUuTIUeNHkCEZdhRZ0uRJlA1tpGTZEuHKlS5luow5U6A7XrzcDfTosOPPnwvd7bTJUBOaPGiI4tQZ1CBQqFAN8lqVp6jRVbzy7HS3CmmebhiHWnRnoypRmTURZuWliesqTVrDXsxjI8+qfzhHusuTcy7Nf2oLwqXq9l83TVlX/T1IFW/BxN3u/uOFxi6vlxP9Yp4peLAmyToPg6XK+DCvlZXzWC14N/S/vt2yJky99fHVg1Vhc27rGC1qyxPhulMKeRVfzH1LL+ym1DBug6uObxWodTda4t1QI9eKVuDkmEq7M+0Huxh6dLdo5lrvS5Dv4r59zXr/F5d4XvGaGHLnfH5g4vFwOi6ughDLarWKIMvJqu50E6q0/jRKMCLplusqK9AKwgmso1C77b8FqbItQg3H6k6/jyaEyJ3E3isspww1vGu79tzrS8DYCGysLbzYoy+iijxrSC7H5IvqyImqu6sq5XTUEClN8oiSl9ck/MgrxaiM8sf/jpPMtOo0SUzK1biEbTGqcpLOTNwKgwuphdpabTEu3enmzpxIJEjOPAnz7yCmREPSBsdEA+nC1aj8MyQkxRprUUhTEjJSSgVSsVJMA/tz0kwXvbTTSDmNNCAAOw=='
data = base64.b64decode(img)
print type(data)  # <type 'str'>
hex_data = binascii.b2a_hex(data)
print type(hex_data)  # <type 'str'>
with open('ddd.png', 'wb') as f:
    f.write(data)
 
2.python将base64数据写成图片的方法,并将数据转为16进制字符串的方法
import base64
img = 'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABEAABERABEiABEzACIAACIRACIiACIzADMAADMRADMiADMzADd3REREQAAVQAAmQAA3QBVAABVVQBMmQBJ3QCZAACZTACZmQCT3QDdAADdSQDdkwDungDu7iIiIgAAZgAAqgAA7gBmAABmZgBVqgBP7gCqAACqVQCqqgCe7gDuAADuTwD/VQD/qgD//zMzMwAAdwAAuwAA/wB3AAB3dwBduwBV/wC7AAC7XQC7uwCq/wD/AEQAREQAiEQAzEREAEREREREiEREzESIAESIRESIiESIzETMAETMRETMiETMzEQAAFUAAFUAVUwAmUkA3VVVAFVVVUxMmUlJ3UyZAEyZTEyZmUmT3UndAEndSUndk0nd3U/u7mYAAGYAZlUAqk8A7mZmAGZmZlVVqk9P7lWqAFWqVVWqqk+e7k/uAE/uT0/unlX/qlX//3cAAHcAd10Au1UA/3d3AHd3d11du1VV/127AF27XV27u1Wq/1X/AFX/VYgAiIgAzIhEAIhERIhEiIhEzIiIAIiIRIiIiIiIzIjMAIjMRIjMiIjMzIgAAIgARJkATJkAmZMA3ZlMAJlMTJlMmZNJ3ZmZAJmZTJmZmZOT3ZPdAJPdSZPdk5Pd3ZkAAKoAAKoAVaoAqp4A7qpVAKpVVapVqp5P7qqqAKqqVaqqqp6e7p7uAJ7uT57unp7u7qr//7sAALsAXbsAu6oA/7tdALtdXbtdu6pV/7u7ALu7Xbu7u6qq/6r/AKr/Var/qswAzMxEAMxERMxEiMxEzMyIAMyIRMyIiMyIzMzMAMzMRMzMiMzMzMwAAMwARMwAiN0Ak90A3d1JAN1JSd1Jk91J3d2TAN2TSd2Tk92T3d3dAN3dSd3dk93d3d0AAN0ASe4AT+4Anu4A7u5PAO5PT+5Pnu5P7u6eAO6eT+6enu6e7u7uAO7uT+7unu7u7u4AAP8AAP8AVf8Aqv8A//9VAP9VVf9Vqv9V//+qAP+qVf+qqv+q////AP//Vf//qv///ywAAAAAagAeAAAI//8EDiRY0OBBhAkVLmTY0OFDiAVtTKQY0eJFjBkXUuTIUeNHkCEZdhRZ0uRJlA1tpGTZEuHKlS5luow5U6A7XrzcDfTosOPPnwvd7bTJUBOaPGiI4tQZ1CBQqFAN8lqVp6jRVbzy7HS3CmmebhiHWnRnoypRmTURZuWliesqTVrDXsxjI8+qfzhHusuTcy7Nf2oLwqXq9l83TVlX/T1IFW/BxN3u/uOFxi6vlxP9Yp4peLAmyToPg6XK+DCvlZXzWC14N/S/vt2yJky99fHVg1Vhc27rGC1qyxPhulMKeRVfzH1LL+ym1DBug6uObxWodTda4t1QI9eKVuDkmEq7M+0Huxh6dLdo5lrvS5Dv4r59zXr/F5d4XvGaGHLnfH5g4vFwOi6ughDLarWKIMvJqu50E6q0/jRKMCLplusqK9AKwgmso1C77b8FqbItQg3H6k6/jyaEyJ3E3isspww1vGu79tzrS8DYCGysLbzYoy+iijxrSC7H5IvqyImqu6sq5XTUEClN8oiSl9ck/MgrxaiM8sf/jpPMtOo0SUzK1biEbTGqcpLOTNwKgwuphdpabTEu3enmzpxIJEjOPAnz7yCmREPSBsdEA+nC1aj8MyQkxRprUUhTEjJSSgVSsVJMA/tz0kwXvbTTSDmNNCAAOw=='
data = base64.b64decode(img)

print(type(data))  # <class 'bytes'>
hex_imgdata = ''.join(["%02X" % x for x in data]).strip()
print(type(hex_imgdata))  # <class 'str'>
 
 with open('ddd.png', 'wb') as f: 
    f.write(data)
3.python 字符串与16进制互转
1 ByteToHex的转换
def ByteToHex( bins ):
    return ''.join( [ "%02X" % x for x in bins ] ).strip()
返回数据16进制字符串 '91f8148cfbd5faa3d98b'

2.bytes类型转为16进制bytes类型
import binascii
sign 为bytes类型字符串 如 b'x91xf8x14x8cxfbxd5|'
print(type(sign)) >> <class 'bytes'>
ret = binascii.b2a_hex(sign) ret为16进制bytes
print(ret) 》》 如 b'91f8148cfbd5faa3d98b'

3 HexToByte的转换
def HexToByte( hexStr ):
    return bytes.fromhex(hexStr)

>>> binascii.b2a_hex(u"你好啊".encode("utf8"))
'e4bda0e5a5bde5958a'
>>>

>>> binascii.b2a_hex(u"你好啊".encode("gbk"))
'c4e3bac3b0a1'
>>> binascii.a2b_hex("e4bda0e5a5bde5958a")
'xe4xbdxa0xe5xa5xbdxe5x95x8a'
>>> binascii.a2b_hex("e4bda0e5a5bde5958a").decode("utf8")
u'u4f60u597du554a'
>>> print binascii.a2b_hex("e4bda0e5a5bde5958a").decode("utf8")
你好啊
>>> binascii.b2a_hex(u"你好啊121A号".encode("gbk"))
'c4e3bac3b0a131323141bac5'
>>> '48656c6c6f'.decode('hex')
'Hello'
>>> 'c4e3bac3b0a131323141bac5'.decode('hex')
'xc4xe3xbaxc3xb0xa1121Axbaxc5'
>>> print 'c4e3bac3b0a131323141bac5'.decode('hex')
你好啊121A号
>>> u"你好啊121A号".encode("gbk").encode('hex')
'c4e3bac3b0a131323141bac5'
>>>
3.Python 3中bytes/string的区别

python 3中最重要的新特性可能就是将文本(text)和二进制数据做了更清晰的区分。文本总是用unicode进行编码,以str类型表示;而二进制数据以bytes类型表示。

在python3中,不能以任何隐式方式将str和bytes类型二者混合使用。不可以将str和bytes类型进行拼接,不能在str中搜索bytes数据(反之亦然),也不能将str作为参数传入需要bytes类型参数的函数(反之亦然)。

字符串和字节符之间划分界线是必然的。下面这个图解要牢记于心:

python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别第1张

strings可以被编码(encode)成字bytes,bytes也可以解码(decode)成strings:

1
2
3
4
>>> '€20'.encode('utf-8')
b'xe2x82xac20'
>>> b'xe2x82xac20'.decode('utf-8')
'€20'

可以这样理解:

string是文本(text)的抽象表示。字符串(string)由字符组成,字符也是抽象的实体且与任何二进制表示无关。
当操纵字符串的时候,很多细节是不用了解的。我们可以分割、切片和拼接字符串,在字符串内部进行搜索。但并不在乎内部是如何表示的,也不用在意底层一个字符要花费多少byte。
只有在需要将string编码(encode)成byte的时候,比如:通过网络传输数据;或者需要将byte解码(decode)成string的时候,我们才会关注string和byte的区别。

传入encode和decode的参数是编码方式。编码是一种用二进制数据表示抽象字符的方式。目前有很多种编码。上面给出的UTF-8是其中一种,下面是另一种:

1
2
3
4
>>> '€20'.encode('iso-8859-15')
b'xa420'
>>> b'xa420'.decode('iso-8859-15')
'€20'

编码是这个转换过程中至关重要的一部分。若不编码,bytes对象b'xa420'只是一堆比特位而已。编码赋予其含义。采用不同的编码,这堆比特位的含义就会大不同:

1
2
>>> b'xa420'.decode('windows-1255')
'₪20'
4.python2和python3中str,bytes区别

python2中,有basestring、str、bytes、unicode四种类型

其中str == bytes , basestring = (str,unicode)

>>> isinstance('s',str)
True
>>> isinstance('s',bytes)
True
>>> isinstance('s',unicode)
False
>>> isinstance('s'.decode(),unicode)
True
>>> isinstance('s'.decode(),basestring)
True
>>> isinstance('s',basestring)
True

python3中,有str和bytes类型

>>> isinstance('s',str)
True
>>> isinstance('s',bytes)
False
>>> isinstance('s',unicode)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'unicode' is not defined
>>> isinstance(b's',bytes)
True
>>> isinstance('s',basestring)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'basestring' is not defined

  

参考:

https://www.cnblogs.com/abclife/p/7445222.html

https://blog.csdn.net/weixin_37989267/article/details/79432242

 https://www.cnblogs.com/leomei91/p/7681416.html

免责声明:文章转载自《python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇c# 汉语拼音排序函数CustomValidator 的应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

你不知道的 Blob

来自公众号:全栈修仙之路 如果你允许用户从你的网站上下载某些文件,那你可能会遇到 Blob 类型。为了实现上述的功能,你可以很容易从网上找到相关的示例,并根据实际需求进行适当的调整。对于部分开发者来说,在完成上述功能之后,他们并不会继续思考 Blob 是什么? 这就导致了一些开发者,还是停留在熟练使用 API 的层面,当遇到比较棘手的问题时,就束手无策...

数据算法 --hadoop/spark数据处理技巧 --(13.朴素贝叶斯 14.情感分析)

十三。朴素贝叶斯   朴素贝叶斯是一个线性分类器。处理数值数据时,最好使用聚类技术(eg:K均值)和k-近邻方法,不过对于名字、符号、电子邮件和文本的分类,则最好使用概率方法,朴素贝叶斯就可以。在某些情况下,NBC也可以用来对数值数据分类。   对于数值数据的分类,比如(连续属性,身高,体重,脚长),建议采用采用高斯分布,令x是一个连续属性。首先,按类对数...

jquery 图片转为base64

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width" /> <title>jquery 图片bas...

ML基础06-数据不平衡问题

0、什么是数据不平衡问题 在机器学习的分类问题中,不同类别的样本数据量存在差异。在某些场景,比如网页点击率预估(网页点击率低),购物推荐(浏览产生的购买少),信用卡欺诈,网络攻击识别等,这种差异可能会较大。传统的学习算法,对不同类别的数据一视同仁地处理,会产生在多数类样本效果较好,但是在少数类样本上效果差的问题。而在上述的四种场景中,我们更关注的是少数类的...

FlexCell图片显示问题

1、  在FlexCell设计器中,添加图片,导出xml 可以看到  图片不大于20k显示:(20KB为不准确的数字)     图1 图片大于20k显示:(20KB为不准确的数字) 图2 图片转换为一串字符串,是Base64编码格式的 2、  所以flexcell图片显示问题思路是: 1)上传图片同时,转换为以base64编码格式的字符串; 显示时,按1...

RAID0的条带大小设置

考虑到现有的硬件资源以及其他因素,我们选择RAID 0的工作方式: 1. 重起机器进入BIOS界面,按照主板说明书的提示开启RAID功能。2. 保存重起,根据界面提示按CTRL+I进入Intel Raid设置界面,选择第一项,创建一个新的卷。3. 选择模式为Raid 0;填写卷名;选择一个条带大小(strip size),其中有16KB、32KB、64KB...