可以在Mac OSX上使用pbpaste访问屏幕捕获粘贴板吗?

时间:2015-08-25 22:26:54

标签: macos shell

在Mac OSX上,用户执行:cmd-option-shift-4将屏幕捕获到粘贴板(剪贴板)。这个存储的粘贴板是什么?可以通过pbpaste访问吗?

命令行工具pbpaste允许访问粘贴板。我尝试了这个命令的所有变体,并且从未从屏幕捕获生成输出(但是,如果我粘贴到预览中,则输出屏幕截图)。

pbpaste [-help] [-pboard {general |统治者|找到|字体}] [-Prefer {txt | rtf | PS}]

我尝试了-pboard和-Prefer值的每个排列而没有运气。

预期用途是这样的脚本:

bash脚本:

#/bin/bash
pbpaste > /tmp/tmp.png
tesseract /tmp/tmp.png /tmp/tmp -l eng #open source ocr tool
cat /tmp/tmp.txt                       #tool adds .txt

修改

我接受的答案是真的,对于命令pbpaste。但是,我找到了我要找的东西。一个名为pngpaste的命令。我通过brew安装了这个,以防其他人最终需要它。

所以,我的png剪贴板中的ocr现在就像这样:

#!/bin/bash

#https://github.com/jcsalterego/pngpaste
pngpaste /tmp/tmp.png

#open source ocr tool
tesseract /tmp/tmp.png /tmp/tmp -l eng

#tesseract adds .txt
cat /tmp/tmp.txt | pbcopy     

4 个答案:

答案 0 :(得分:1)

没有。 pbpaste只能从粘贴板中检索纯文本,EPS或RTF数据。截图不是这些类型,因此pbpaste无法访问它。

答案 1 :(得分:0)

更新了答案

从你的问题和评论来看,你想要做的一般想法是:

  • 标记屏幕区域
  • OCR it
  • 将OCR&#39文字放入剪贴板

如果我们详细介绍...您想要将屏幕区域复制到剪贴板,请将其粘贴到/tmp中的文件中,运行tesseract,然后将tesseract输出放入剪贴板。

现在,这不会起作用,因为正如@duskwuff所说,pbpaste并不支持图形,所以现在你的问题变成了如何在不使用{的情况下获取文件的屏幕截图{1}}。在我看来,你有两个选择......

选项1

编写一个调用pbpaste的脚本,并将屏幕捕获到一个文件并对其进行OCR。该脚本如下所示:

screencapture

选项2

编写一个脚本,持续监视#/bin/bash screencapture -i /tmp/tmp.png tesseract /tmp/tmp.png /tmp/tmp -l eng pbcopy < /tmp/tmp.txt 以获取新的屏幕截图,当新的屏幕截图到达时,将其OCR并填入剪贴板。要使用此方法,您可能希望在原始答案中使用这两个命令强制所有屏幕捕获转到/tmp。您的脚本将如下所示

/tmp

这两种方法的主要区别在于如何调用它们。选项1要求您运行脚本或双击脚本以启动捕获过程。选项2要求您只需按下cmd-option-shift-4并标记屏幕,然后自动发生OCR。

原始答案

不确定您要做的是什么,但是您可以通过发出这两个命令将截图作为PNG保存在/ tmp中;

#!/bin/bash
fswatch /tmp | while read file; do tesseract ...; pbcopy < ...; done

进行这些更改后,您需要重新启动GUI

defaults write com.apple.screencapture type png
defaults write com.apple.screencapture location /tmp

答案 2 :(得分:0)

对于@ELLIOTTCABLE:)

我接受的答案是真的,对于命令pbpaste。但是,我找到了我要找的东西。一个名为pngpaste的命令。我通过brew安装了这个,以防其他人最终需要它。

所以,我的png剪贴板中的ocr现在就像这样:

#!/bin/bash

#https://github.com/jcsalterego/pngpaste
pngpaste /tmp/tmp.png

#open source ocr tool
tesseract /tmp/tmp.png /tmp/tmp -l eng

#tesseract adds .txt
cat /tmp/tmp.txt | pbcopy     

答案 3 :(得分:0)

我认为您不需要访问剪贴板。 修改如下。

  1. 更改屏幕截图的文件夹。 defaults write com.apple.screencapture location ~/screens/ killall SystemUIServer
  2. ss2CB.plist复制到~/Library/LaunchAgents/
  3. ss2cb.py复制到~/
  4. 使用Cmd + Shift + 4&amp;进行测试粘贴吧!
  5. 完成!
  6. ss2CB.plist

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Disabled</key>
        <false/>
        <key>Label</key>
        <string>copy Screen Shots to ClipBoard</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/python</string>
            <string>~/ss2cb.py</string>
        </array>
        <key>WatchPaths</key>
        <array>
            <string>~/screens/</string>
        </array>
    </dict>
    </plist>
    

    ss2cb.py

    #! /usr/bin/python
    import pygtk
    pygtk.require('2.0')
    import gtk
    import os
    import sys
    
    def copy_image(f):
        assert os.path.exists(f), "file does not exist"
        image = gtk.gdk.pixbuf_new_from_file(f)
        clipboard = gtk.clipboard_get()
        clipboard.set_image(image)
        clipboard.store()
    
    def all_files_under(path):
        path = os.path.expanduser(path);
        cur_path = path
        for filename in os.listdir(path):
            yield os.path.join(cur_path, filename)
    
    if len(sys.argv) < 2:
        file = max(all_files_under('~/screens/'), key=os.path.getctime)
    else:
        file = sys.argv[1]
    
    copy_image(file);
    print 'File: "' + file + '" Copied'