Я искал много способов в Интернете, но я все еще не могу решить это. Я новичок в Python. Пожалуйста, помогите мне взглянуть.
import hashlib
import time
import traceback
import win32api
import win32clipboard as clip
from io import BytesIO
import win32con
from PIL import Image
def setImage(data):
m = hashlib.md5()
try:
clip.OpenClipboard()
clip.EmptyClipboard()
clip.SetClipboardData(win32con.CF_DIB, data)
m.update(clip.GetClipboardData(win32con.CF_DIB))
clip.CloseClipboard()
return m.hexdigest()
except:
traceback.print_exc()
setImage(data)
def copyPicMain(imagePath, width = 600, height = 480, internal=0,
notResize = False):
m = hashlib.md5()
try:
clip.OpenClipboard()
m.update(clip.GetClipboardData(win32con.CF_DIB))
clip.CloseClipboard()
pre_md5 = m.hexdigest()
except TypeError:
# if clip is empty
traceback.print_exc()
print('empty')
pre_md5 = ''
except:
traceback.print_exc()
clip.OpenClipboard()
m.update(clip.GetClipboardData(win32con.CF_DIB))
clip.CloseClipboard()
pre_md5 = m.hexdigest()
img = Image.open(imagePath)
output = BytesIO()
if not notResize:
img = img.resize((height, width), Image.BILINEAR)
img.convert("RGB").save(output, "BMP")
data = output.getvalue()[14:]
output.close()
new_md5 = setImage(data)
print(pre_md5, new_md5)
time.sleep(internal)
win32api.keybd_event(win32con.VK_CONTROL, 0, 0, 0) # ctrl key code 17
win32api.keybd_event(86, 0, 0, 0) # v key code 86
win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0) # key up
time.sleep(internal)
if __name__ == '__main__':
imagePathList = [r'C:\Users\strives\Desktop\panda.png',r'C:\Users\strives\Desktop\black.png',r'C:\Users\strives\Desktop\1.png']
for imagePath in imagePathList:
copyPicMain(imagePath)
Результат отладки:
C:\Users\strives> python C:\Users\strives\Desktop\test.py Traceback (последний вызов был последним):
Файл "C:\Users\strives\Desktop\test.py", строка 28, в файле copyPicMain m.update(clip.GetClipboardData(win32con.CF_DIB))
Ошибка типа: указанный формат буфера обмена недоступен
пустой
Traceback (последний вызов последний):
Файл "C:\Users\strives\AppData\Local\Programs\Python\Python37-32\lib\site-
packages\PIL\Image.py ", строка 2656, в открытом fp.seek(0)
AttributeError: у объекта 'list' нет атрибута 'seek'
Во время обработки вышеупомянутого исключения произошло другое исключение:
Traceback (последний вызов последний):
Файл "C:\Users\strives\Desktop\test.py", строка 60, в copyPicMain (imagePathList)
Файл "C:\Users\strives\Desktop\test.py", строка 42, в copyPicMain img = Image.open(imagePath)
Файл "C:\Users\strives\AppData\Local\Programs\Python\Python37-32\lib\site- packages\PIL\Image.py", строка 2658, в открытом fp = io.BytesIO(fp.read( ))
AttributeError: у объекта 'list' нет атрибута 'read'
РЕДАКТИРОВАТЬ
Я перекомпилировал его, и произошла следующая ошибка.
C:\Users\strives> python C:\Users\strives\Desktop\test.py
cfdb447aa6b20d45ba79b5802a677454 1aa0384b01ed1e2ecd6158c52a1355a5 1aa0384b01ed1e2ecd6158c52a1355a5 c28f8947d15edb17752ec5f503a1b82
Traceback (последний вызов был последним):
Файл "C:\Users\strives\Desktop\test.py", строка 27, в copyPicMain clip.OpenClipboard()
pywintypes.error: (5, 'OpenClipboard', 'Доступ запрещен.') c28f8947d15edb17752ec5f503a1b82b cfdb447aa6b20d45ba79b5802a677454
ты ошибся в
for imagePath in imagePathList:
copyPicMain(imagePathList)
Вы должны отправить imagePath в качестве параметра, а не полный список, например:
for imagePath in imagePathList:
copyPicMain(imagePath)
Надеюсь, это поможет :)