2017-03-10 9 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') 

私は入れませんエラーは、次のとおりです、PILを使用せずに写真にアクセスするための別の方法を

IOError: [Errno 22] invalid mode ('rb') or filename:'<PIL.JpegImagePlugin.JpegImageFile 
image mode=RGB size=4032x2268 at 0x30C8D50>' 

誰もが何が起こっているか知っているか、またはそうでない場合は?ありがとう。

答えて

3

私は問題はあなたがここにPILでイメージを開いているということだと思いますPILイメージオブジェクトを文字列に変換すると、ファイル名は戻されません。 代わりにこの行を試してください:
f = open("/home/nao/recordings/cameras/bcard.jpg", 'rb')

+0

''は有効なファイル名ではありません。 – Aaron

+0

ああもちろん...たくさんの人に感謝 – Yellowman94

1

ファイルの内容を読みたい場合は、ファイル名を渡すだけです。代わりに、PIL Imageにロードしてから画像をファイルopen()に渡します。これは意味をなさない機能です。

試してみてください。
f = open(str(card_pic), 'rb') #open in binary
しかしstr(card_pic)をしようとしている。ここでファイルをオープンしようとするよりも、
card_pic = Image.open("/home/nao/recordings/cameras/bcard.jpg")

with open("/home/nao/recordings/cameras/bcard.jpg", 'rb') as f: 
    l = f.read(1024) 
    while (l): 
     s.send(l) 
     l = f.read(1024) 
関連する問題