【问题标题】:Trying to Print With Python (and PIL)尝试使用 Python(和 PIL)进行打印
【发布时间】:2017-03-10 14:10:13
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我认为问题在于您在此处使用 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')

    【讨论】:

    • 完全正确。 &lt;PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=4032x2268 at 0x30C8D50&gt; 不是有效的文件名。
    【解决方案2】:

    如果您想读取文件的内容,则只需传递文件名。相反,您将其加载到 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)
    

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多