PIL.UnidentifiedImageError:无法识别图像文件<_io.BytesIO object at 0x11020f880>

问题描述 投票:0回答:1

我正在尝试通过API网关将图像上传到s3,并通过API网关的REST端点发送base64编码图像的字节数据。下面是如果我对字节数据进行硬编码的话,Python 代码可以工作

imgByte = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00x\x00\x00\x00\x1c\x08\x06\x00\x00\x00\xaa\x01{\x9e\x00\x00\x0c?iCCPICC Profile\x00\x00H\x89\x95W\x07XS\xc9\x16\x9e[R!\xb4\x00\x02RBo\x82H\r %\x84\x16@z\x11l\x84$@(1\x06\x82\x8a\x1dYTp-\xa8X\xc0\x86\xae\x8a(v@\xec\x88\x9dE\xb1\xf7\x05\x11\x15e],\xd8\x957)\xa0\xeb\xbe\xf2\xbd\xf9\xbe\xb9\xf3\xdf\x7f\xce\xfc\xe7\xcc\xb93\xf7\xde\x01@\xfd$W,\xceA5\x00\xc8\x15\xe5KbC\x02\x18c\x93S\x18\xa4\xa7\x80\x0c\x0c\x01\x05\xb8\x00#./O\xcc\x8a\x8e\x8e\x00\xb0\x0c\xb6\x7f/\xefn\x02D\xd6^s\x90i\xfd\xb3\xff\xbf\x16M\xbe \x8f\x07\x00\x12\rq\x1a?\x8f\x97\x0b\xf1A\x00\xf0*\x9eX\x92\x0f\x00Q\xc6\x9bO\xcd\x17\xcb0\xac@[\x02\x03\x84x\xa1\x0cg(p\x95\x0c\xa7)\xf0^\xb9M|,\x1b\xe2\x16\x00\xc8\xaa\\\xae$\x03\x00\xb5+\x90g\x14\xf02\xa0\x86Z\x1f\xc4N"\xbeP\x04\x80:\x03b\xdf\xdc\xdc\xc9|\x88S!\xb6\x816b\x88e\xfa\xcc\xb4\x1ft2\xfe\xa6\x996\xa4\xc9\xe5f\x0ca\xc5\\\xe4\x85\x1c(\xcc\x13\xe7p\xa7\xff\x9f\xe9\xf8\xdf%7G:\xe8\xc3\nV\xd5LIh\xacl\xce0o\xb7\xb3\'\x87\xcb\xb0*\xc4\xbd\xa2\xb4\xc8(\x88\xb5 \xfe \xe4\xcb\xed!F\xa9\x99\xd2\xd0\x04\x85=j\xc8\xcbc\xc3\x9c\x01]\x88\x9d\xf8\xdc\xc0p\x88\r!\x0e\x16\xe5DF(\xf9\xb4ta0\x07b\xb8B\xd0i\xc2|N<\xc4z\x10/\x14\xe4\x05\xc5)m6I&\xc7*}\xa1\xf5\xe9\x126K\xc9\x9f\xe7J\xe4~e\xbe\x1eJ\xb3\x13XJ\xfd\xd7\x99\x02\x8eR\x1fS+\xcc\x8cO\x82\x98\n\xb1E\x8101\x12b5\x88\x1d\xf3\xb2\xe3\xc2\x956\xa3\x0b3\xd9\x91\x836\x12i\xac,~\x0b\x88c\x05\xa2\x90\x00\x85>V\x90.\t\x8eU\xda\x97\xe6\xe6\r\xce\x17\xdb\x94)\xe4D*\xf1\xfe\xfc\xcc\xf8PE~\xb0\x16\x1eW\x1e?\x9c\x0bvE b%\x0c\xea\x08\xf2\xc6F\x0c\xce\x85/\x08\x0cR\xcc\x1d{&\x10%\xc4)u>\x88\xf3\x03b\x15cq\xaa8\'Zi\x8f\x9b\trBd\xbc\x19\xc4\xaey\x05q\xca\xb1xb>\\\x90\n}<]\x9c\x1f\x1d\xaf\x88\x13/\xcc\xe2\x86E+\xe2\xc1\x97\x81\x08\xc0\x06\x81\x80\x01\xa4\xb0\xa6\x81\xc9 \x0b\x08\xdbz\x1bz\xe1\x9d\xa2\'\x18p\x81\x04d\x00\x01pP2\x83#\x92\xe4="x\x8d\x03\x85\xe0O\x88\x04 oh\\\x80\xbcW\x00\n \xffu\x88U\\\x1d@\xba\xbc\xb7@>"\x1b<\x818\x17\x84\x83\x1cx/\x95\x8f\x12\ryK\x04\x8f!#\xfc\x87w.\xac<\x18o\x0e\xac\xb2\xfe\x7f\xcf\x0f\xb2\xdf\x19\x16d"\x94\x8ct\xd0#C}\xd0\x92\x18D\x0c$\x86\x12\x83\x89\xb6\xb8\x01\xee\x8b{\xe3\x11\xf0\xea\x0f\xab3\xce\xc4=\x07\xe7\xf1\xdd\x9e\xf0\x84\xd0NxD\xb8A\xe8 \xdc\x99$,\x92\xfc\x14\xe5\x18\xd0\x01\xf5\x83\x95\xb9H\xfb1\x17\xb8\x15\xd4t\xc3\x03p\x1f\xa8\x0e\x95q]\xdc\x008\xe0\xae\xd0\x0f\x0b\xf7\x83\x9e\xdd \xcbV\xc6-\xcb\n\xe3\'\xed\xbf\xcd\xe0\x87\xa7\xa1\xb4\xa38QP\xca0\x8a?\xc5\xe6\xe7\x91jvjnC*\xb2\\\xff\x98\x1fE\xaciC\xf9f\x0f\xf5\xfc\xec\x9f\xfdC\xf6\xf9\xb0\r\xff\xd9\x12[\x88\x1d\xc0\xcea\xa7\xb0\x0b\xd8Q\xac\x010\xb0\x13X#\xd6\x8a\x1d\x93\xe1\xa1\xd5\xf5X\xbe\xba\x06\xbd\xc5\xca\xe3\xc9\x86:\xc2\x7f\xf8\x1b|\xb2\xb2L\xe69\xd5:\xf58}Q\xf4\xe5\x0b\xa6\xc9\xde\xd1\x80=Y<]"\xcc\xc8\xccg\xb0\xe0\x17A\xc0\xe0\x88x\x8e#\x18\xceN\xce.\x00\xc8\xbe/\x8a\xd7\xd7\x9b\x18\xf9w\x03\xd1m\xfd\xce\xcd\xff\x03\x00\x9f\x13\x03\x03\x03G\xbesa\'\x00\xd8\xe7\x01\xb7\xff\xe1\xef\x9c\r\x13~:T\x008\x7f\x98\'\x95\x14(8\\v!\xc0\xb7\x84:\xdci\xfa\xc0\x18\x98\x03\x1b8\x1fg\xe0\x0e\xbc\x81?\x08\x02a \n\xc4\x83d0\x11F\x9f\t\xd7\xb9\x04L\x053\xc1<P\x02\xca\xc02\xb0\n\xac\x03\x1b\xc1\x16\xb0\x03\xec\x06\xfbA\x038\nN\x81\xb3\xe0\x12\xb8\x02n\x80{p\xf5t\x83\x17\xa0\x0f\xbc\x03\x9f\x11\x04!!4\x84\x8e\xe8#&\x88%b\x8f8#L\xc4\x17\tB"\x90X$\x19IE2\x10\x11"Ef"\xf3\x912\xa4\x1cY\x87lFj\x90}\xc8a\xe4\x14r\x01iG\xee \x9dH\x0f\xf2\x1a\xf9\x84b\xa8*\xaa\x8d\x1a\xa1V\xe8H\x94\x89\xb2\xd0p4\x1e\x9d\x80f\xa0S\xd0B\xb4\x18]\x82\xaeA\xab\xd1]h=z\n\xbd\x84\xde@;\xd0\x17h?\x060\x15L\x173\xc5\x1c0&\xc6\xc6\xa2\xb0\x14,\x1d\x93`\xb3\xb1R\xac\x02\xab\xc6\xea\xb0&\xf8\x9c\xafa\x1dX/\xf6\x11\'\xe2t\x9c\x81;\xc0\x15\x1c\x8a\'\xe0<|\n>\x1b_\x8c\xaf\xc3w\xe0\xf5x\x0b~\r\xef\xc4\xfb\xf0o\x04\x1a\xc1\x90`O\xf0"p\x08c\t\x19\x84\xa9\x84\x12B\x05a\x1b\xe1\x10\xe1\x0c\xdcK\xdd\x84wD"Q\x97hM\xf4\x80{1\x99\x98E\x9cA\\L\\O\xdcC<Il\'v\x11\xfbI$\x92>\xc9\x9e\xe4C\x8a"qI\xf9\xa4\x12\xd2Z\xd2.\xd2\t\xd2UR7\xe9\x03Y\x85lBv&\x07\x93S\xc8"r\x11\xb9\x82\xbc\x93|\x9c|\x95\xfc\x94\xfc\x99\xa2A\xb1\xa4xQ\xa2(|\xcat\xcaR\xcaVJ\x13\xe52\xa5\x9b\xf2\x99\xaaI\xb5\xa6\xfaP\xe3\xa9Y\xd4y\xd45\xd4:\xea\x19\xea}\xea\x1b\x15\x15\x153\x15O\x95\x18\x15\xa1\xca\\\x955*{U\xce\xabt\xaa|T\xd5R\xb5Se\xab\x8eW\x95\xaa.Q\xdd\xaezR\xf5\x8e\xea\x1b\x1a\x8dfE\xf3\xa7\xa5\xd0\xf2iKh5\xb4\xd3\xb4\x87\xb4\x0fjt5G5\x8e\x1a_m\x8eZ\xa5Z\xbd\xdaU\xb5\x97\xea\x14uKu\x96\xfaD\xf5B\xf5\n\xf5\x03\xea\x97\xd5{5(\x1aV\x1al\r\xae\xc6l\x8dJ\x8d\xc3\x1a\xb74\xfa5\xe9\x9a\xa34\xa34s5\x17k\xee\xd4\xbc\xa0\xf9L\x8b\xa4e\xa5\x15\xa4\xc5\xd7*\xd6\xda\xa2uZ\xab\x8b\x8e\xd1\xcd\xe9l:\x8f>\x9f\xbe\x95~\x86\xde\xadM\xd4\xb6\xd6\xe6hgi\x97i\xef\xd6n\xd3\xee\xd3\xd1\xd2q\xd5I\xd4\x99\xa6S\xa9sL\xa7C\x17\xd3\xb5\xd2\xe5\xe8\xe6\xe8.\xd5\xdd\xaf{S\xf7\xd30\xa3a\xaca\x82a\x8b\x86\xd5\r\xbb:\xec\xbd\xdep=\x7f=\x81^\xa9\xde\x1e\xbd\x1bz\x9f\xf4\x19\xfaA\xfa\xd9\xfa\xcb\xf5\x1b\xf4\x1f\x18\xe0\x06v\x061\x06S\r6\x18\x9c1\xe8\x1d\xae=\xdc{8ox\xe9\xf0\xfd\xc3\xef\x1a\xa2\x86v\x86\xb1\x863\x0c\xb7\x18\xb6\x1a\xf6\x1b\x19\x1b\x85\x18\x89\x8d\xd6\x1a\x9d6\xea5\xd65\xf67\xce2^i|\xdc\xb8\xc7\x84n\xe2k"4Yir\xc2\xe49C\x87\xc1b\xe40\xd60Z\x18}\xa6\x86\xa6\xa1\xa6R\xd3\xcd\xa6m\xa6\x9f\xcd\xac\xcd\x12\xcc\x8a\xcc\xf6\x98=0\xa7\x9a3\xcd\xd3\xcdW\x9a7\x9b\xf7Y\x98X\x8c\xb1\x98iQkq\xd7\x92b\xc9\xb4\xcc\xb4\\my\xce\xf2\xbd\x95\xb5U\x92\xd5\x02\xab\x06\xabg\xd6z\xd6\x1c\xebB\xebZ\xeb\xfb64\x1b?\x9b)6\xd56\xd7m\x89\xb6L\xdbl\xdb\xf5\xb6W\xecP;7\xbbL\xbbJ\xbb\xcb\xf6\xa8\xbd\xbb\xbd\xd0~\xbd}\xfb\x08\xc2\x08\xcf\x11\xa2\x11\xd5#n9\xa8:\xb0\x1c\n\x1cj\x1d:\x1du\x1d#\x1c\x8b\x1c\x1b\x1c_\x8e\xb4\x18\x992r\xf9\xc8s#\xbf9\xb99\xe58mu\xba7JkT\xd8\xa8\xa2QM\xa3^;\xdb9\xf3\x9c+\x9d\xaf\xbb\xd0\\\x82]\xe6\xb84\xba\xbcr\xb5w\x15\xb8np\xbd\xedFw\x1b\xe3\xb6\xc0\xad\xd9\xed\xab\xbb\x87\xbb\xc4\xbd\xce\xbd\xc7\xc3\xc2#\xd5\xa3\xca\xe3\x16S\x9b\x19\xcd\\\xcc<\xefI\xf0\x0c\xf0\x9c\xe3y\xd4\xf3\xa3\x97\xbbW\xbe\xd7~\xaf\xbf\xbc\x1d\xbc\xb3\xbdwz?\x1bm=Z0z\xeb\xe8.\x1f3\x1f\xae\xcff\x9f\x0e_\x86o\xaa\xef&\xdf\x0e?S?\xae_\xb5\xdf#\x7fs\x7f\xbe\xff6\xff\xa7,[V\x16k\x17\xebe\x80S\x80$\xe0P\xc0{\xb6\x17{\x16\xfbd \x16\x18\x12X\x1a\xd8\x16\xa4\x15\x94\x10\xb4.\xe8a\xb0YpFpmp_\x88[\xc8\x8c\x90\x93\xa1\x84\xd0\xf0\xd0\xe5\xa1\xb78F\x1c\x1e\xa7\x86\xd3\x17\xe6\x116+\xac%\\5<.|]\xf8\xa3\x08\xbb\x08ID\xd3\x18tL\xd8\x98\x15c\xeeGZF\x8a"\x1b\xa2@\x14\'jE\xd4\x83h\xeb\xe8)\xd1Gb\x881\xd11\x951ObG\xc5\xce\x8c=\x17G\x8f\x9b\x14\xb73\xee]|@\xfc\xd2\xf8{\t6\t\xd2\x84\xe6D\xf5\xc4\xf1\x895\x89\xef\x93\x02\x93\xca\x93:\xc6\x8e\x1c;k\xec\xa5d\x83darc\n)%1e[J\xff\xb8\xa0q\xab\xc6u\x8fw\x1b_2\xfe\xe6\x04\xeb\t\xd3&\\\x98h01g\xe2\xb1I\xea\x93\xb8\x93\x0e\xa4\x12R\x93Rw\xa6~\xe1Fq\xab\xb9\xfdi\x9c\xb4\xaa\xb4>\x1e\x9b\xb7\x9a\xf7\x82\xef\xcf_\xc9\xef\x11\xf8\x08\xca\x05O\xd3}\xd2\xcb\xd3\x9fe\xf8d\xac\xc8\xe8\xc9\xf4\xcb\xac\xc8\xec\x15\xb2\x85\xeb\x84\xaf\xb2B\xb36f\xbd\xcf\x8e\xca\xde\x9e=\x90\x93\x94\xb3\'\x97\x9c\x9b\x9a{X\xa4%\xca\x16\xb5L6\x9e<mr\xbb\xd8^\\"\xee\x98\xe25e\xd5\x94>I\xb8d[\x1e\x927!\xaf1_\x1b\xfe\xc8\xb7Jm\xa4\xbfH;\x0b|\x0b*\x0b>LM\x9cz`\x9a\xe64\xd1\xb4\xd6\xe9v\xd3\x17M\x7fZ\x18\\\xf8\xdb\x0c|\x06oF\xf3L\xd3\x99\xf3fv\xceb\xcd\xda<\x1b\x99\x9d6\xbby\x8e\xf9\x9c\xe29\xddsC\xe6\xee\x98G\x9d\x97=\xef\xf7"\xa7\xa2\xf2\xa2\xb7\xf3\x93\xe67\x15\x1b\x15\xcf-\xee\xfa%\xe4\x97\xda\x12\xb5\x12I\xc9\xad\x05\xde\x0b6.\xc4\x17\n\x17\xb6-rY\xb4v\xd1\xb7R~\xe9\xc52\xa7\xb2\x8a\xb2/\x8by\x8b/\xfe:\xea\xd75\xbf\x0e,I_\xd2\xb6\xd4}\xe9\x86e\xc4e\xa2e7\x97\xfb-\xdfQ\xaeY^X\xde\xb5b\xcc\x8a\xfa\x95\x8c\x95\xa5+\xdf\xae\x9a\xb4\xeaB\x85k\xc5\xc6\xd5\xd4\xd5\xd2\xd5\x1dk"\xd64\xae\xb5X\xbbl\xed\x97u\x99\xebnT\x06T\xee\xa92\xacZT\xf5~=\x7f\xfd\xd5\r\xfe\x1b\xea6\x1am,\xdb\xf8i\x93p\xd3\xed\xcd!\x9b\xeb\xab\xad\xaa+\xb6\x10\xb7\x14ly\xb25q\xeb\xb9\xdf\x98\xbf\xd5l3\xd8V\xb6\xed\xebv\xd1\xf6\x8e\x1d\xb1;Zj<jjv\x1a\xee\\Z\x8b\xd6Jk{v\x8d\xdfuew\xe0\xee\xc6:\x87\xba\xcd{t\xf7\x94\xed\x05{\xa5{\x9f\xefK\xddws\x7f\xf8\xfe\xe6\x03\xcc\x03u\x07-\x0fV\x1d\xa2\x1f*\xadG\xea\xa7\xd7\xf75d6t4&7\xb6\x1f\x0e;\xdc\xdc\xe4\xddt\xe8\x88\xe3\x91\xedGM\x8fV\x1e\xd39\xb6\xf48\xf5x\xf1\xf1\x81\x13\x85\'\xfaO\x8aO\xf6\x9e\xca8\xd5\xd5<\xa9\xf9\xde\xe9\xb1\xa7\xaf\xb7\xc4\xb4\xb4\x9d\t?s\xfel\xf0\xd9\xd3\xe7X\xe7N\x9c\xf79\x7f\xf4\x82\xd7\x85\xc3\x17\x99\x17\x1b.\xb9_\xaaouk=\xf4\xbb\xdb\xef\x87\xda\xdc\xdb\xea/{\\n\xbc\xe2y\xa5\xa9}t\xfb\xf1\xab~WO]\x0b\xbcv\xf6:\xe7\xfa\xa5\x1b\x917\xdao&\xdc\xbc}k\xfc\xad\x8e\xdb\xfc\xdb\xcf\xee\xe4\xdcyu\xb7\xe0\xee\xe7{s\xef\x13\xee\x97>\xd0xP\xf1\xd0\xf0a\xf5\x1f\xb6\x7f\xec\xe9p\xef8\xd6\x19\xd8\xd9\xfa(\xee\xd1\xbd.^\xd7\x8b\xc7y\x8f\xbft\x17?\xa1=\xa9xj\xf2\xb4\xe6\x99\xf3\xb3\xa3=\xc1=W\x9e\x8f{\xde\xfdB\xfc\xe2so\xc9\x9f\x9a\x7fV\xbd\xb4yy\xf0/\xff\xbfZ\xfb\xc6\xf6u\xbf\x92\xbc\x1ax\xbd\xf8\x8d\xfe\x9b\xedo]\xdf6\xf7G\xf7?|\x97\xfb\xee\xf3\xfb\xd2\x0f\xfa\x1fv|d~<\xf7)\xe9\xd3\xd3\xcfS\xbf\x90\xbe\xac\xf9j\xfb\xb5\xe9[\xf8\xb7\xfb\x03\xb9\x03\x03b\xae\x84+\xff\x15\xc0`E\xd3\xd3\x01x\xbd\x1d\x00Z2\x00tx>\xa3\x8eS\x9c\xff\xe4\x05Q\x9cY\xe5\x08\xfc\'\xac8#\xca\x8b;\x00u\xf0\xff=\xa6\x17\xfe\xdd\xdc\x02`\xefVx\xfc\x82\xfa\xea\xe3\x01\x88\xa6\x01\x10\xef\tP\x17\x97\xa1:xV\x93\x9f+e\x85\x08\xcf\x01\x9bb\xbe\xa6\xe5\xa6\x81\x7fS\x14g\xce\x1f\xe2\xfe\xb9\x052UW\xf0s\xfb/\x15\x92|\x88\xa2\xc7\xa9\xa9\x00\x00\x00\x8aeXIfMM\x00*\x00\x00\x00\x08\x00\x04\x01\x1a\x00\x05\x00\x00\x00\x01\x00\x00\x00>\x01\x1b\x00\x05\x00\x00\x00\x01\x00\x00\x00F\x01(\x00\x03\x00\x00\x00\x01\x00\x02\x00\x00\x87i\x00\x04\x00\x00\x00\x01\x00\x00\x00N\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x01\x00\x00\x00\x90\x00\x00\x00\x01\x00\x03\x92\x86\x00\x07\x00\x00\x00\x12\x00\x00\x00x\xa0\x02\x00\x04\x00\x00\x00\x01\x00\x00\x00x\xa0\x03\x00\x04\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x00ASCII\x00\x00\x00Screenshot"*\xc6\xfe\x00\x00\x00\tpHYs\x00\x00\x16%\x00\x00\x16%\x01IR$\xf0\x00\x00\x01\xd5iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0">\n   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n      <rdf:Description rdf:about=""\n            xmlns:exif="http://ns.adobe.com/exif/1.0/">\n         <exif:PixelYDimension>28</exif:PixelYDimension>\n         <exif:PixelXDimension>120</exif:PixelXDimension>\n         <exif:UserComment>Screenshot</exif:UserComment>\n      </rdf:Description>\n   </rdf:RDF>\n</x:xmpmeta>\ny\xf6\x0b\xb5\x00\x00\x00\x1ciDOT\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00(\x00\x00\x00\x0e\x00\x00\x00\x0e\x00\x00\x06\xdbJ\x80\x86\xaa\x00\x00\x06\xa7IDATh\x05\xecX\x0bPUE\x18\xfeA\x0c|?\x00_\xe3\x13\x11A\xdeVJ\x8a\x86\x0f\x1e\x12\x82\x93\x9a\x83"\x89\x9a\x9a\x96ef\xe5\x94ed\xd88\x96\x0f\x14\x10\x01\x01\x01\xc50A\x06\xbc \xea\x90\x0f\x04\ty\x13"\x0f-P\x1e\x02\n\x08\x02\x97m\xff\xc5s\xe6\xdc{\xcf\xbdA\xa134\xed\xcc\x9d\xfd\xf7\xdb\x7f\xf7?{\xbe\xbd\xff~{\xd4\x08-\xf0\xbc\\\xdd\xb3\x1b\xf2N\x85\xc1\x80\x91\xa38\x88\xd5\xda\x06S\xc1\xd1/P\x06\x136\xcaSS \xc6\xdd\x95A\x13\xe7\xdb\x82\xa3\xefqa7o\xa7\x1d>\x00\x85\xd1g\xf9\xb6\xf4\xd93xZS\r\xfa\x8eN`w\xe0\x08\x8f\xf7\xa4\x91\x1d\x1a\x04%\x17\x13\xd8\x94f\xab=@\xcf\xceAa\xfaK\x9f}\x02MU\x95\xe0\x1c\x1c\xae\xd0\xd7\xdb\x80\xc8\xc5\x0e\xf0\xe8\xce\xef\xb0\xb9\xb0\xac\xf3\xd1\x91`V::H\xf0\x9c\x99$b\xd1\x02\x0e\xe9r\xdd\xde\xd2B$[7\x93\xa8\xe5.\xe4^\xf2\x95.\x8f\xfb3\xe5:9j0\x81$|\xbc\xa5\xcbc\xba\xeb\x98\xfc\xed.\x16\x03\xe3\xfc\xbc\xccYtx\x84\xc3|\xe2;m\xb2h_o\x03O;\xd9\xb3\xf5r\xcf\r\x9c\xd1\\\xfb\x88u\xfc\x13\x82\xb99\xba[\xbfL\x82\x8f\x99Me\xeb\xab\xce\xcbUx\xcc\xff\tVx%=\x03\xbcL\x82\xafyy2\x82\xaf\xec\xda\xa9\xf0\xf0\xe1\xf6\xf3\xfe\xb3\xff`\xb5\xfc\xa8Hv\x06\xb755\xc2\xb5\xef=\xa1\xbf\xee\x08\x98\xb9\xedS\x99\xa3Gk\xe80\x98\xb4\xc0\x96\xc7Z\xeaj\xa1\xf4r\x12\xdf\x16\x1az\xb6\xf6\xa09x\x88\x10Rj\x97\xdf\xbc\x011\xef\xae\xec\xd6\x19L\x8f\x03\xb8\x7f5\x19j\xf2s\xa1\xa9\xb2\x12\xb4\r\x8d`\xcc\x0c+\xd0\xa1\xb5X\xf9\xd5\xf3k\xc8\r\x0f\x05\x97\x90\x08H\xa2gmkC\x03\xac\xb9\x96\x06}\x07\x0c\xe0\xdd\xe9?\x18\x9e\xfcq\x1f6\xe5\xdd\xe51\xce@\x9dP\x92(\x81\xaa\xdclh\xae\xad\x85\x81\xa3G\xc3\x08Ss\xd0[h\x07\xa0\xa6\xc6\xb9\xf1umQ!Tfg\xc1\xd87fC\xe3\xc3\x07P|!\x1e\x06\x8f\x1b\x0bS\x9c\x96@\xbf\xe1\xc3\xa1"-\x95i\x02\r-M0Y\xe5\x0e\x03G\x8d\xe6\xc7\n\x8d\xda\xa2;Pq+\x15j\n\xf2Ak\xe8P\xd051\x85\xf1sm\xa0o\xbf\xfeB7\x05[\xfe\x0cV\xc3\xb3I\xc1K\x0e\xd0\x99f\x0c\xef\x9c\x8b\xe3Q\\l\xd4Rg\xbe-4V\xc4J@\xdb\xc0P\x08)\xb5\xbbK0.:q\xdb\x07\x805\x16\r--@\xc2\xf1E[\xae\xdb\xc86\xa6\xba\x86\x86L<\x8e\xe0%ag\x80f\x0cH?z\x08\xe6\xee\xde\x03&\xaen\xbc\x9f2\x82+3o\x83\xe4\xc3ML\x801g$\xf4\xb9&\xd556\x05\xa7\x80\x10F\x1a?\x1152\x03\xfd\xe1\xc6>/\xb0X\xb7\x01\xb2\x82;\x85)\x91J\x01\xc5\xe7\x14\'g\xb8\xb8}+\xa8\xa9\xab\x03b\xf8\x9e\xf0}\t\x0b\xe2\xe9\xbe\xde\x90\xee\xe3\xcd|\xfahj\x82\xb4\xb5\x95\xc5\x1d2a\x12\x15\xa3\x87\x01c++\xe7=\xdc\xa0\xbe\xa4\x18\xdc\x93S:]\xcaSo\x12\xfc\x95$%\xb2\x14\x16j3\x8b\xb59\x1ckJ\xa8LZkmlT\xf0\x89\\\xe2\xc8\xc6\xd7\x14\x16\xc8\xf8\xaajt\'E7UW\x93\xe3\xd3\x8d\xc91sC\x92\x15\x12DZ\xea\xeb\x08\xa1\xc2\xb0\xf6n\x11\x89Y\xb3\x8a\xc5\xa6\xb7\x00\x85p\x9c\xc8*OK%\r\x15\x15\xc4\xc7p\x129\xbd\xd8^\xc6O,E\xe3\xfc\x01\xaf\x99\x11_c}\x92y"\x80\xd0MEZ\x9b\x1aIq\xa2\x84D\xbb\xbb\xb2xq\x1b\xd7\xca\xcc\x83\x8d\xdb\x01\xc7X\x1f\xc6\xa8/+%u\xa5%L\xb8\x1e\x9d:\x91\x9c]\xf16\xa9\xbfW\xc6\xb0So\xd92?|~a\xb9\xb1o/\xc3\xcf\xadZNP/t\xb4\xb7\x13|\xdfy\x91\x11\xc4\xdfb\x1a\xf177"\r\x0f*\x84CT\xda=&\xb2\xb8E\xbf(\x82\xaf|\xf99[xQ|\xac\xc2\x82\xe8\x0e\'a\xb66\xc4\xd7h2#\\\xe8 $\x18q$\x05\xb3\xd6\x83\x8c\xdfx71\x82\xb1\x13\x8f\xaf\xe2\x84\x0b\xbc\x1fg\xd4\x97\x95\xb09p\xb3\xb4>m\xe2`Vs\x04c\xcd\x95\x94\xfd?0\xff\x0c\x7f\x1f\x0e"\xa9\x07\x7fd\x98\xf0\xd6\xf1\xf8\xfe=\xb6\xa1psH\xdb\xdax_\xce(\x88:\xc3\xc6$n\xdf\xcaA\x7f[\xf7\n\x82\xdb\x9a\x9b\x89\x8f\x91\x1e\t\xb7\xb3Q\xba\xa0\x8c\xe3~l\xf1\xb7\x8e\x1c\x94\xf1\x91\'\x98j\x07\xe6\x97\xb4c\x1b\xef\xa7\x8c`\xdeA\xc4\xc0+\x17n\x94\xaa\xdc\x1c\x99^\x8e`\xe1\xc6\xe00\xe1\xe6\xcc\x0c\x0ed\xe3\xef\xc4\xc6\xf0\xe3o\xfe\xb4O\x01\xe3;\xd1\xa0\x19\x0b\xff\xc5x\xa5\x93\xb6+n\x00\x19\xdf\xe7\x8d^ApuA>[\xf8\xf9\xb5n,\xbda\xda\x93\xff\xe5D\x9cd>\xf4\x8c\x96Y\xa7<\xc1\x98\xf2B\xde\xb4"~\xa6\x06\x9di\x9ezw\x95\xe0gO\x9e\x10\xbcN\xe2/v\xedj\x16\xef\xe1\xed\x0c\x99x\x1c\x99B\x8292\x85\x04g\x9f\x0c\xee$\xf3|4?>~\xf3{\x0c\xc3M(\xbf>\xae\x1d\xe1\xb8\x90\xf9\xd4\x95\x14\xf3\xe3T\x19j\xd8\x89\xa71*\xe3 \xab\xe90l\xb2>\xb8\xc6\x8b+de\x07;\xe2\xa8\x86Q4\xbd\x08\x91U,\x89\x83\x84\x8f\xb6\xa8\n\xcf\xf7\x8d\xb4\xb0\x84\xa5\x91\xe7\xf8\xb6Pd\x8dy}\x06\xc3Qh\xe1W\xb5\xd9_|\x05\xe6\x1e\xebA\x99\xc8\xc2\xaf[9\'\x83\xa1X\x12\x0f\x8d\x95\x0f\x01\x15\xb5|\xc1X\x18\x93+\x9c\xc8r\xf0\xf6\xe3\xbf\x9aQ\xcd\x00\xd7\xbd<\xc1\xee\xe0\x11\xd0_\xe4\xc4\\s\xc2B\xe0\xeaw\xdf\x80\xed\xfeC0e\xb1\x0b\xc3\xe8\xb9\x0cuw\x8b\xb8\xa9T\xd6N\x81\xa10\xdez\xaeJ\x1f\xec\xec\x15\x04\xd3s\n\xe26x\xc0\xd8Y\xd6`A\tQU^\x194\x08FY\xbe\xca\xbb\x88\x11\xdcD\xc9\n\x9d7\x1b\x86\x8c\x1b\x0f+%\x97\x81~\xdcQ\xb8&Q\x91\x05Q\xcb\\\x18>\xcez\x0e\xbd\xf6XS\xc5\xac\r\xea\x1a}\xd8\xdcTx\xd1\xabZ\x1e\xdbL=E0\xc6\xab\xca\xc9\x82\xf9{\xf7C\x7f\x1d\x1d~\rb\x86\xae\x89\x99\x82\x82\x17\xf3\xeb\x15)\x1a\xc5\x07\x9ew4K\xa8\xcaF\xa2}\xf2)\x9as\x8a\x7f\x7f=\x9b\x13\x95\xbcX\x8a\xe6R\xed/\xae\xcb\xb8!2u\xdc\xa6ul|O\xa6h\xd4\x05\xb8\xce\x8a\xf44\x99X\xff\xa6\xd1+\x08\xee\x90JI\x90\x95%\xbd\xb6\x98\x92\x96\xc7\x8fE\xd7\x8b\xd7\x8f\xea\xfc<\x85>e\x04\xa3z\xc5\x97\x89\xdf\xd0\xc5\x08\xbe\xbcs\x07\xebG\xe5*V\xa2\xddV\xf48\xc1\xd9\xa1\'\xd8\x9ci\xde\x07\xc4B2\xac\xf4R\xa2\xa8\xc2V6\xe0/\x00\x00\x00\xff\xff\x81?\x07d\x00\x00\x03WIDAT\xedViHTQ\x18=cR\xa6\xa8\xa5\xa6\xa2\xe6\x9e\xa5\xa9\x91\x90f\x8bQ\xa6iTF\xfdh#\x89\xa0RB\x08\x7fTP\x96\x1a\n\x95\x81\xa5\xa1IFn\x15Q\xd1"\x9a\x11\x88;j\xe9hJ\xb9T\xe4\xb8/\xa3\x96\x99\xdb\xcc\xeb\xbdk\xef\x8e\x132\x1a10\xca{?\xe6}\xf7|\xdb\xfd\xce\xb9\xf71`\xfe<\xbf\xa4}\xccm\'\x1b\xe6A\xa0/\x0f\xfd\xd3\xfby\xf0!\x92\xdf\xdb\xf0q\xd6y\xade%$\'\xef\xcc\xe9\x19s\xea\x1ef\x91\xd87\xe1a\xcc\xc4\xe8\xa8R<\xb7\xf7L\xbf-L\xb2\xeb\nfP\xd2\xa2\xe4+\x88\x8a ym\x15\xe5J\xb8\\&c\xd2\xb7nd\x92\\\x1c\x98\x945\xce\xe4=5\xa0\xf2\xf6-\x92\x97}\xe2\xd8T\x98\xd8]\xb5b&\xd9\xcd\x89\xf8;\xab\xab\x94\xfc\xd5w\xef\x10\xfcs^.\xc5\xc5\xf7S\t\xd6\x94\xf3\x8ab\xb5\x19\xf7\t\xd6\xf8\xf29\xc5&FF\xc8\x9e\xee\xb8\xafd:\xc5\xd5\x14\xe7\x8d\x9a\xb4\xc9:\xf9\x17\xcf\xf3\xd0\x8co\xd1\xdb\xb3\xe1\x0c\xd8G6:\x8a\xe6\xdcl,\xd4\xd7\x87\x9d\xaf?\x07\xd1\xc7\xe3d(\x96:8\xd2\xf5\xf7V\t*\x13\xe2\xe9\x9a3$\xc5\x85\x18\xee\xed\x81\xed\xb6\xedXd`H}\xab\x0f\x1e\x81\xf9Z\x0f\xb2nx\xf1\x0c\xad\xa5%\xd47\xdc\xd3\rII\x11\xf4-\xad`\xb1\xce\x8b\xe2\xa2\x05Z\xd8\x16{\x9d\xae9\x83\x91\xc9\xc0\x92M\xe2\x97\xd8\xd9\xc3\xdeo\x07\xf4L\xcd\xd0Q\xf5\x0e\xade\xa5\x18\xe9\x97b\xf3\xc5H\xb8\x1d=\xa6\x94W\x18}\tuY\xe9\xd8\x9b\xf9\x98\xed\xe1\xa9\xe4{\x9f\x94\x88\xf2\xf88\x82iik#\xa4\xbe\x99\xfa\xb9\x19\x1f\x07\x05blh\x88\x9d\xc9\x0fV\xde\x1b\xa0\xad\xa3\x83\xae\x1a1z\xeaj\xe1r\xe00\n\xa3"`\xe1\xe9\x05=3s\xf8\xc5\xdd$\xb9\xe2\xd4\x14\x94^\x8bE@B2\xec\xfd\x03\x08V\x93v\x0f%\xb1\xd1\xf0\x8fO\x84c\xe0.\x82}\xc8LC\xd1\x95\xcb$o\xc5\xee \xda\xb7\xa5\xa8\x00\xaf\xc3B \x1b\x1b\x83\xe3\xce]0uu\x07{\x80\to\xddl\xdf%6\xb6\xd8\xf7\xe8)t\x96\x1a\xd1\x1cU\x86\x88\xbb\xb5\xaa\x028_P\xc6#Xz\xae\xa7a\\\xa3\'\xfb\xf7\xd0\xb5*\x83\x1b\x9c\x1f\x80\'[U<\xe7\xfb\x9bl>\x9e\x91\xcb\xc1\xde\x10p$\x8e\x0c\xf4\xf30tM\x96\xc1\xe3T(\xdc\x83\x8fS\x8c7\xf8\x9e\xd3\t\xcc\x1d\xc8t\x1fo\xc8e\x13\xd3\xf6l\xaf\xac@A\xe4\x05\xf477\x91r"--\x988\xbb\xc0\xf7\xea\r\x18\xda\xd8\xa18&\x92\xbd\x149\x90\x8f\x8f\xe3Du=\x89\xf9_\x81\xb9"\x03_\xbf \xff\xc29t\x8a\xab\xc8\xc1\x9el.\x82\xf5&\x1fl\x89\x8a!\x17\x82`\xb3\xf8\x11qw|\x16q\x1a\x172\xd4\xd1\x81A\xc97\xe8\x1a\x9b\xb0d\xdb\x12\x81\xd4\xb1I\xeeP\xfdho\xc3\xcf\xce\x0e\x189\xadb\xbfN\x06\xeah3mM\xee\xab\xda\xd7\xf8\x89\x15Y\x0e\x83\xe5\xd6Xll<m\x9c*p\xce\n\xacj(\xc1\xa7`@\x10X\xc1\xc5\xbc\xb4\x04\x81\xe7\xa5\xac\x8a\xa1\x04\x81\x15\\\xccKK$\x95J\xe7\xe4\x9f\xacy\xa9\x86\x1a\x86\x12\x04V\x03\xa9\x9aTR\x10X\x93\xd4P\xc3^\x04\x81\xd5@\xaa&\x95\x14\xfedi\x92\x1aj\xd8\x8b \xb0\x1aH\xd5\xa4\x92\xbf\x01\xc5Ei#\xfd\xe8\x19\x8e\x00\x00\x00\x00IEND\xaeB`\x82'
response = create_presigned_post(AWS_S3_BUCKET, object_name)
loaded_image = Image.open(io.BytesIO(imgByte))
quantized_image = loaded_image.quantize(colors=50)
saved_quantized_image = io.BytesIO()
quantized_image.save(saved_quantized_image,'PNG')
saved_quantized_image.seek(0)
http_response = requests.post(response['url'], data=response['fields'], files= saved_quantized_image)

但是,如果我将

imgByte
替换为解码后的 Base64 编码字节数据,则上述代码将不起作用,如下所示

data['content']="base 64 endoded value of imgByte"
decodeByte = base64.b64decode(data['content']).decode('ascii')
loaded_image = Image.open(io.BytesIO(decodeByte))

它抛出一个错误,

io.BytesIO needs bytes like object and not a string
,但我什至尝试使用
decodeByte
imgByte = bytes(decodeByte, 'ascii')
转换为字节,但它用双斜杠替换数据中的单斜杠并抛出
PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x11020f880>

python image python-imaging-library byte image-upload
1个回答
0
投票

以下是步骤:

  • 在磁盘上创建 1x1 像素 JPEG,
  • 将其加载为字节
  • base64 编码
  • base64 解码它
  • 将其包裹在
    BytesIO
    中并用PIL读取

#!/usr/bin/env python3

import base64
from PIL import Image
from io import BytesIO
from pathlib import Path

# Create 1-pixel black image and save
im = Image.new('RGB', (1,1))
im.save('a.jpg')
# Read image into "jpeg" which has type "bytes"
jpeg = Path('a.jpg').read_bytes()
# base64 encode "jpeg" into "b64" which has type "string"
b64 = base64.b64encode(jpeg)
# decode "b64" back into "binary" which has type "bytes"
binary = base64.b64decode(b64)
# wrap in BytesIO for PIL to read and recover initial image
im = Image.open(BytesIO(binary))
© www.soinside.com 2019 - 2024. All rights reserved.