<p>好的,我想我已经发现你的问题了。让我们下载一个新文件作为示例,并使用它。我正在处理一小块灰色正方形</p>
<pre><code>import cv2
from base64 import b64encode, b64decode
import numpy as np
# Load image, b64 encode, byte decode to string
img = cv2.imread(r'C:\Users\me\Pictures\koala.png', cv2.IMREAD_GRAYSCALE)
encoded_img = b64encode(img)
image_b64_str = encoded_img.decode("utf-8")
# Read the string back, encode into bytes, then b64 decode
image_b64_in = image_b64_str.encode("utf-8")
base64_decoded_image = b64decode(image_b64_in)
decodeed_img_from_string_only = np.frombuffer(image_b64_in, dtype=np.uint8)
decodeed_img_from_b64_decode = np.frombuffer(base64_decoded_image, dtype=np.uint8)
print(img)
print(f"b64 encoded: {encoded_img}")
print(f"b64 encoded then string decoded: {image_b64_str}")
print('')
print(f"String encoded to bytes: {image_b64_in}")
print(f"Bytes decoded to array: {decodeed_img_from_string_only}")
print('')
print(f"String encoded to bytes and then b64 decoded: {base64_decoded_image}")
print(f"B64-decoded bytes decoded to array: {decodeed_img_from_b64_decode}")
</code></pre>
<p>以下是上述模块的输出:</p>
<pre><code>[[181 182 182 182 181 182 186]
[181 182 182 182 182 183 186]
[182 182 183 183 184 185 186]
[182 182 183 184 185 186 186]
[182 182 182 183 185 186 187]
[180 181 181 182 184 185 187]
[178 179 181 181 182 184 188]
[177 179 180 180 181 183 188]]
b64 encoded: b'tba2trW2urW2tra2t7q2tre3uLm6tra3uLm6ura2tre5uru0tbW2uLm7srO1tba4vLGztLS1t7w='
b64 encoded then string decoded: tba2trW2urW2tra2t7q2tre3uLm6tra3uLm6ura2tre5uru0tbW2uLm7srO1tba4vLGztLS1t7w=
String encoded to bytes: b'tba2trW2urW2tra2t7q2tre3uLm6tra3uLm6ura2tre5uru0tbW2uLm7srO1tba4vLGztLS1t7w='
Bytes decoded to array: [116 98 97 50 116 114 87 50 117 114 87 50 116 114 97 50 116 55
113 50 116 114 101 51 117 76 109 54 116 114 97 51 117 76 109 54
117 114 97 50 116 114 101 53 117 114 117 48 116 98 87 50 117 76
109 55 115 114 79 49 116 98 97 52 118 76 71 122 116 76 83 49
116 55 119 61]
String encoded to bytes and then b64 decoded: b'\xb5\xb6\xb6\xb6\xb5\xb6\xba\xb5\xb6\xb6\xb6\xb6\xb7\xba\xb6\xb6\xb7\xb7\xb8\xb9\xba\xb6\xb6\xb7\xb8\xb9\xba\xba\xb6\xb6\xb6\xb7\xb9\xba\xbb\xb4\xb5\xb5\xb6\xb8\xb9\xbb\xb2\xb3\xb5\xb5\xb6\xb8\xbc\xb1\xb3\xb4\xb4\xb5\xb7\xbc'
B64-decoded bytes decoded to array: [181 182 182 182 181 182 186 181 182 182 182 182 183 186 182 182 183 183
184 185 186 182 182 183 184 185 186 186 182 182 182 183 185 186 187 180
181 181 182 184 185 187 178 179 181 181 182 184 188 177 179 180 180 181
183 188]
</code></pre>
<p>值得注意的是,人类可读的字符串重新编码看起来与原始b64编码相同,但生成的数组与原始数组完全不同,而字符串重新编码的b64编码在视觉上看起来非常不同,但重新创建了原始数组(没有合适的形状,这是典型的缓冲区。你需要自己提供)</p>
<p>我认为,如果要读取保存的字符串以转换它们,则需要在其上使用<code>df['col'].applymap(lambda x: b64decode(x.encode("utf-8")))</code></p>
<p><strong>然而这引出了一个问题</strong>-为什么作为字节表示的<code>your_string.encode("utf-8")</code>不适用于API,而<code>b64encode(b64decode(your_string.encode("utf-8")))</code>理论上应该产生相同的表示…我对此不确定。也许可以确保<code>df['col'].applymap(lambda x: x.encode("utf-8"))</code>或<code>df['col'].astype(bytes)</code>作为另一个评论者建议的是给你想要的</p>
<p>进一步阅读:
<a href="https://stackoverflow.com/questions/51014551/convert-string-of-base64-back-to-base64-bytes">Convert string of base64 back to base64 bytes</a>,
<a href="https://stackoverflow.com/questions/3470546/how-do-you-decode-base64-data-in-python">How do you decode Base64 data in Python?</a></p>