我正在尝试将图像发送到打印机以使用Python脚本进行打印。我没有过多的语言经验,并从其他几个人那里得到了一些提示,我现在遇到了一个问题,我一直在收到一个错误,说丢失了PIL中的文件。这是我的代码:
from PIL import Image
from PIL.ExifTags import TAGS
import socket
import sys
from threading import Thread
def print_bcard(HOST):
print 'Printing business card'
card_pic = Image.open("/home/nao/recordings/cameras/bcard.jpg")
HOST = '192.168.0.38'
PORT = 9100
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
f = open(str(card_pic), 'rb') #open in binary
l = f.read(1024)
while (l):
s.send(l)
l = f.read(1024)
f.close()
s.close()
print_bcard('192.168.0.38')
我不断得到的错误是:
IOError: [Errno 22] invalid mode ('rb') or filename:'<PIL.JpegImagePlugin.JpegImageFile
image mode=RGB size=4032x2268 at 0x30C8D50>'
有没有人知道发生了什么,或者如果没有,不使用PIL访问照片的方式不同?感谢。
答案 0 :(得分:3)
我认为问题是你在这里用PIL打开图像:
card_pic = Image.open("/home/nao/recordings/cameras/bcard.jpg")
而不是试图在这里打开文件:
f = open(str(card_pic), 'rb') #open in binary
但str(card_pic)
试图将PIL图像对象转换为字符串,它不会返回文件名。
试试这一行:
f = open("/home/nao/recordings/cameras/bcard.jpg", 'rb')
答案 1 :(得分:1)
如果要读取文件的内容,则只需传递文件名即可。相反,您将它加载到PIL Image
中,然后将图像传递给文件open()
函数,该函数没有任何意义。
尝试:
with open("/home/nao/recordings/cameras/bcard.jpg", 'rb') as f:
l = f.read(1024)
while (l):
s.send(l)
l = f.read(1024)