尝试使用Python(和PIL)进行打印

时间:2017-03-10 14:10:14

标签: python image python-2.7 printing python-imaging-library

我正在尝试将图像发送到打印机以使用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访问照片的方式不同?感谢。

2 个答案:

答案 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)