30 lines
888 B
Python
30 lines
888 B
Python
"""剪贴板图片保存为 PNG — win32clipboard + PIL 混合方案
|
|
检测用 ctypes (快), 保存用 PIL (兼容性好)
|
|
"""
|
|
import sys
|
|
import ctypes
|
|
|
|
def save_clipboard_image(output_path):
|
|
# 快速检测 (ctypes, <1ms)
|
|
if not ctypes.windll.user32.IsClipboardFormatAvailable(8): # CF_DIB
|
|
print("NO_IMAGE", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
# 保存 (PIL ImageGrab, ~80ms)
|
|
try:
|
|
from PIL import ImageGrab
|
|
img = ImageGrab.grabclipboard()
|
|
if img is None:
|
|
sys.exit(1)
|
|
img.save(output_path, "PNG", optimize=False)
|
|
print(output_path)
|
|
except Exception as e:
|
|
print(f"ERROR: {e}", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) < 2:
|
|
print("Usage: clipboard-save.py <output_path>", file=sys.stderr)
|
|
sys.exit(1)
|
|
save_clipboard_image(sys.argv[1])
|