尝试在Python 3.6上使用Python 2.7打开一个项目。我遇到了ord()
函数的问题。
使用Python 2.7可以使用ord()
,我可以使用相同的图片输出图像文件。我的意思是,我可以在图片中写下信息字节,我正在给予。
但是对于Python 3.6,我试着不打电话给ord()
而且我得到一条记录信息的行而不是我的真实图片与信息,就像用python 2.7一样。
from PIL import Image
import sys
textfile = open(sys.argv[1],'rb')
textstring = textfile.read()
textfile.close()
xval = 500
yval = int(len(textstring)/(xval*4) + 1)
im = Image.new('RGBA', (xval,yval), (0,0,0,0))
width = xval
height = yval
count = 0
for y in range (0,height):
for x in range (0,width):
if count == len(textstring) - 4:
im.putpixel((x,y),(ord(textstring[count]),ord(textstring[count + 1]),ord(textstring[count + 2]),ord(textstring[count + 3])))
break
if count == len(textstring) - 3:
im.putpixel((x,y),(ord(textstring[count]),ord(textstring[count + 1]),ord(textstring[count + 2]),0))
break
if count == len(textstring) - 2:
im.putpixel((x,y),(ord(textstring[count]),ord(textstring[count + 1]),0,0))
break
if count == len(textstring) - 1:
im.putpixel((x,y),(ord(textstring[count]),0,0,0))
break
im.putpixel((x,y),(ord(textstring[count]),ord(textstring[count + 1]),ord(textstring[count + 2]),ord(textstring[count + 3])))
count += 4
im.save(sys.argv[2])
在python 3中,我使用ord()
:
TypeError:ord()期望的字符串长度为1,但找到了int im.putpixel((x,y),(ord(textstring [count]),ord(textstring [count + 1]),ord(textstring [count + 2]),ord(textstring [count + 3])))
我试图添加b
而不是ord()
,但这并不成功。
要运行程序,需要添加args:python encryption.py inputfile image.png
你能提出一些建议,我该如何解决?感谢。
答案 0 :(得分:1)
您有一个文本文件,但是您明确地以二进制模式打开它:
textfile = open(sys.argv[1],'rb')
使用
textfile = open(sys.argv[1], 'r')
以文本模式阅读。当您以二进制模式阅读它时,您将在Python 3中获得bytes
; bytes
的元素是0到255范围内的整数,因此是错误。 Python 2是如此草率,没有人注意到差异,直到为时已晚。