You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将PIL生成的图片复制到macOS剪贴板?

解决PIL图片复制到macOS剪贴板的问题

你遇到的CFURL错误是因为原osascript代码依赖本地文件路径,但你想直接用内存中的PIL图片数据而非本地文件。可以通过将PIL图片转为base64编码,再用AppleScript解码并设置到剪贴板的方式解决,无需保存图片到本地。

具体实现代码:

import base64
from io import BytesIO
from PIL import Image
import subprocess

# 替换为你的实际PIL图片对象
pil_image = Image.new("RGB", (200, 200), "blue")

# 将PIL图片转为PNG格式的内存字节流
image_buffer = BytesIO()
pil_image.save(image_buffer, format="PNG")
# 编码为base64字符串,实现跨语言数据传递
image_base64 = base64.b64encode(image_buffer.getvalue()).decode("utf-8")

# 构造AppleScript脚本:解码base64并设置剪贴板
applescript_code = f'''
set base64_str to "{image_base64}"
set image_data to decode_base64(base64_str)
set the clipboard to image_data

on decode_base64(str)
    return run script "return current application's NSData's dataWithBase64EncodedString:(str) options:0" with parameters {{str}} as «class PNGf»
end decode_base64
'''

# 调用osascript执行脚本
subprocess.run(["osascript", "-e", applescript_code], check=True)

核心逻辑说明:

  • 用BytesIO将PIL图片转为内存字节流,避免本地文件IO操作
  • 通过base64编码实现Python与AppleScript之间的二进制数据传递
  • AppleScript借助NSData解码base64数据,转换为PNG格式后直接写入剪贴板

这种方式完全绕开了本地文件路径的依赖,自然解决了CFURL相关的报错。

内容的提问来源于stack exchange,提问作者Another_coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:05:36