使用python将图像复制到MacOS剪贴板

at0kjp5o  于 2022-10-30  发布在  Python
关注(0)|答案(2)|浏览(226)

我想复制一个图像(PIL图像)到Mac OS的剪贴板我尝试了几十种不同的方法来做到这一点。大多数Python剪贴板模块,如pyclip或剪贴板不支持图像。
我找到了一个在windows上可以做到这一点的代码,但在mac上没有。我试着使用QT,通过brew安装了它,由于某种原因brew安装了一个新的python 3.7.2(我有3.7.1),并与python和python3等终端命令搞混了。我设法修复了它,但它非常令人沮丧。而且我无论如何也无法让它工作。
我见过一个用win32剪贴板的方法,但它只适用于windows。我尝试了各种不同的模块,但没有一个接受图像。我无法想出一个解决方案,所以我在这里寻求帮助。
一个小背景。我正在写一个应用程序,将保存图像从剪贴板,并保存到一个文件。我没有问题,但我也希望存储我保存的东西,以后能够把它拉回到剪贴板。像打开上次保存。

tvmytwxo

tvmytwxo1#

这一小块丑陋的作品和加载"image.jpg"到剪贴板上...


# !/usr/bin/env python3

import subprocess

subprocess.run(["osascript", "-e", 'set the clipboard to (read (POSIX file "image.jpg") as JPEG picture)'])
bf1o4zei

bf1o4zei2#

马克回答不为我工作的pngs。
但我发现这个很好用http://web.archive.org/web/20221029163614/http://www.alecjacobson.com/weblog/?p=3816
创建一个impbcopy.m


# import <Foundation/Foundation.h>

# import <Cocoa/Cocoa.h>

# import <unistd.h>

BOOL copy_to_clipboard(NSString *path)
{
  // http://stackoverflow.com/questions/2681630/how-to-read-png-image-to-nsimage
  NSImage * image;
  if([path isEqualToString:@"-"])
  {
    // http://caiustheory.com/read-standard-input-using-objective-c 
    NSFileHandle *input = [NSFileHandle fileHandleWithStandardInput];
    image = [[NSImage alloc] initWithData:[input readDataToEndOfFile]];
  }else
  { 
    image =  [[NSImage alloc] initWithContentsOfFile:path];
  }
  // http://stackoverflow.com/a/18124824/148668
  BOOL copied = false;
  if (image != nil)
  {
    NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
    [pasteboard clearContents];
    NSArray *copiedObjects = [NSArray arrayWithObject:image];
    copied = [pasteboard writeObjects:copiedObjects];
    [pasteboard release];
  }
  [image release];
  return copied;
}

int main(int argc, char * const argv[])
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  if(argc<2)
  {
    printf("Usage:\n\n"
      "Copy file to clipboard:\n    ./impbcopy path/to/file\n\n"
      "Copy stdin to clipboard:\n    cat /path/to/file | ./impbcopy -");
    return EXIT_FAILURE;
  }
  NSString *path= [NSString stringWithUTF8String:argv[1]];
  BOOL success = copy_to_clipboard(path);
  [pool release];
  return (success?EXIT_SUCCESS:EXIT_FAILURE);
}

编译gcc -Wall -g -O3 -ObjC -framework Foundation -framework AppKit -o impbcopy impbcopy.m
并运行./impbcopy path/to/file.png

相关问题