如何以与python中相同的方式在bash中读取PNG文件

如何以与python中相同的方式在bash中读取PNG文件,python,bash,base64,png,Python,Bash,Base64,Png,我试图在一个简单的bash脚本中模拟python代码,以发出一个简单的curl请求。对于curl请求,我需要对图像进行64位编码。现在我是这样做的: test=$( base64 outimage.png ) 但是,输出与我尝试模拟的python代码的输出不匹配: out_image = Image.open('outimage.png') temp_output = StringIO.StringIO() out_image.save(temp_output, format='PNG') t

我试图在一个简单的bash脚本中模拟python代码,以发出一个简单的curl请求。对于curl请求,我需要对图像进行64位编码。现在我是这样做的:

test=$( base64 outimage.png )
但是,输出与我尝试模拟的python代码的输出不匹配:

out_image = Image.open('outimage.png')
temp_output = StringIO.StringIO()
out_image.save(temp_output, format='PNG')
temp_output.seek(0)
output_s = temp_output.read()
print output_s
print base64.b64encode(output_s)
我发现
output_s
cat-outimage.png
不匹配,其中
cat-outimage.png
看起来像:

"?PNG

IHDRdp?T IDATx^͝    ??eu?OuwUuW?=?>?,0

??/?D..."
"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00d\x00\x00\x00d\x08\x06\x00\x00\x00p\xe2\x95T\x00\x00>uIDATx\x9c\xcd\xbdY\xb0d\xd9u\x9e\xf7\xed\xe1L9\xdd\xa9\xe6[\xd5\xdd\xd5#\xe6\xa1\t\x82\x94H\x91\xb2B\xb2\xc2a\xca\x0c\xdb\xa2e;B\x0f\..."
输出
如下所示:

"?PNG

IHDRdp?T IDATx^͝    ??eu?OuwUuW?=?>?,0

??/?D..."
"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00d\x00\x00\x00d\x08\x06\x00\x00\x00p\xe2\x95T\x00\x00>uIDATx\x9c\xcd\xbdY\xb0d\xd9u\x9e\xf7\xed\xe1L9\xdd\xa9\xe6[\xd5\xdd\xd5#\xe6\xa1\t\x82\x94H\x91\xb2B\xb2\xc2a\xca\x0c\xdb\xa2e;B\x0f\..."

如何从bash中的outimage.png获取
输出

cat outimage.png
不应该看起来像
输出
,但是
测试
基本64。b64编码(输出)
是您想要匹配的,对吗

shartools
(yum-install-sharutils)中还有一个名为
uuencode
的实用程序,可以对文件进行编码<代码>uudecode向后

这将从二进制文件生成纯文本文件

uuencode /path/to/image.png image.png > image.uu

cat outimage.png
不应该看起来像
output\u s
,但是
test
base64.b64encode(output\u s)
是您想要匹配的,对吗

shartools
(yum-install-sharutils)中还有一个名为
uuencode
的实用程序,可以对文件进行编码<代码>uudecode向后

这将从二进制文件生成纯文本文件

uuencode /path/to/image.png image.png > image.uu

如何检查
输出的值
?你的python代码没有显示它。是的!抱歉,可能也应该在那里添加打印行。请执行并更新您的问题(请不要假设输出与您已经看到的相同。相反,请重新运行并复制粘贴输出)谢谢!我进行了更新,以反映我刚刚运行的内容,但输出仍然不匹配(与以前相同)。嗯。当我获取代码时,为
base64
Image
StringIO
添加导入,将png复制为
outimage.png
,并使用
python yourfile
运行它,我得到一个二进制垃圾,后面是base64转储。在任何时候我都不会得到转义十六进制序列。您使用什么命令/UI来运行此代码段?如何检查
输出的值?你的python代码没有显示它。是的!抱歉,可能也应该在那里添加打印行。请执行并更新您的问题(请不要假设输出与您已经看到的相同。相反,请重新运行并复制粘贴输出)谢谢!我进行了更新,以反映我刚刚运行的内容,但输出仍然不匹配(与以前相同)。嗯。当我获取代码时,为
base64
Image
StringIO
添加导入,将png复制为
outimage.png
,并使用
python yourfile
运行它,我得到一个二进制垃圾,后面是base64转储。在任何时候我都不会得到转义十六进制序列。您使用什么命令/UI来运行此代码段?谢谢!是的,
test
base64。b64编码(输出)
是我试图匹配的。我试试你的建议。
test=$(base64 image.uu)
也与python输出不匹配。有没有其他的想法来解释为什么它们不匹配?不需要
base64 image.uu
,它已经转换成了ASCIIAh<代码>测试=$(cat image.uu)
返回
开始644 image.png MB5!。1PT*&H``-24A$4@`&0``!D“
8
!PXI54
@
$E$051X7LV=M”9BD977O3W5W5757[SW[/L,L,
S[OB^*$1=$#)LBFB@]6HT1A*?>);Q!OCM2@1Q#2…`应该返回
ivborw0kggoaaaansuhueugaaagqaabkcayaaabw4pvuaaa+dUlEQVR4n…
。抱歉,我只是很困惑这些命令返回的是什么格式,一切都是什么格式。谢谢!是的,
test
base64.b64encode(输出)
是我试图匹配的。我会试试你的建议。
test=$(base64 image.uu)
也与python输出不匹配。关于它们为什么不匹配,还有什么其他想法吗?不需要
base64 image.uu
,它已经转换为ASCIIAh!
test=$(cat image.uu)
返回
begin 644 image.png MB5!.1PT*&@H``-24A$4``&0```D
8
!PXI54
$E$051X7LV=M“9BD977O3W5W5757[SW[/L,L,
S[OB 1=$LBFB]6HT1A*?>);Q!OCM2@1Q#2…`应该返回
ivborw0kggoaaaansuhueugaaagqaabkcayaaabw4pvuaaa+dUlEQVR4n…
。对不起,我只是很困惑这些命令返回的是什么格式的东西。