Python3把圖片復制到剪貼板


# coding: utf-8

# pip install pillow, 用Image模塊操作圖片文件
from PIL import Image

# BytesIO是操作二進制數據的模塊
from io import BytesIO

# pip install pywin32, win32clipboard是操作剪貼板的模塊
import win32clipboard


# 圖片路徑,如果是當前路徑,直接寫文件名
# windows路徑要注意是 \,例:'D:\\t.jpg'
# linux是 /,例: '~/t.jpg'
file_image = 't.jpg'


def send_msg_to_clip(type_data, msg):
    """
    操作剪貼板分四步:
    1. 打開剪貼板:OpenClipboard()
    2. 清空剪貼板,新的數據才好寫進去:EmptyClipboard()
    3. 往剪貼板寫入數據:SetClipboardData()
    4. 關閉剪貼板:CloseClipboard()

    :param type_data: 數據的格式,
    unicode字符通常是傳 win32con.CF_UNICODETEXT
    :param msg: 要寫入剪貼板的數據
    """
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardData(type_data, msg)
    win32clipboard.CloseClipboard()


def paste_img(file_img):
    """
    圖片轉換成二進制字符串,然后以位圖的格式寫入剪貼板

    主要思路是用Image模塊打開圖片,
    用BytesIO存儲圖片轉換之后的二進制字符串

    :param file_img: 圖片的路徑
    """
    # 把圖片寫入image變量中
    # 用open函數處理后,圖像對象的模式都是 RGB
    image = Image.open(file_img)

    # 聲明output字節對象
    output = BytesIO()

    # 用BMP (Bitmap) 格式存儲
    # 這里是位圖,然后用output字節對象來存儲
    image.save(output, 'BMP')

    # BMP圖片有14字節的header,需要額外去除
    data = output.getvalue()[14:]

    # 關閉
    output.close()

    # DIB: 設備無關位圖(device-independent bitmap),名如其意
    # BMP的圖片有時也會以.DIB和.RLE作擴展名
    # 設置好剪貼板的數據格式,再傳入對應格式的數據,才能正確向剪貼板寫入數據
    send_msg_to_clip(win32clipboard.CF_DIB, data)


def main():
    paste_img(file_image)


if __name__ == '__main__':
    main()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM