2017-03-10 54 views
0

我试图将图像发送到打印机以使用Python脚本进行打印。我在语言方面没有太多的经验,并从其他一些人那里获得了一些技巧,而且我目前遇到了一个问题,那就是我一直收到一个错误,说PIL中的文件丢失了。这里是我的代码:试图使用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照片以不同的方式?谢谢。

回答

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')

+0

正好。 ''不是有效的文件名。 – Aaron

+0

当然啊......非常感谢 – Yellowman94

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)