在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
答案 0 :(得分:1)
没有。 pbpaste
只能从粘贴板中检索纯文本,EPS或RTF数据。截图不是这些类型,因此pbpaste
无法访问它。
答案 1 :(得分:0)
更新了答案
从你的问题和评论来看,你想要做的一般想法是:
如果我们详细介绍...您想要将屏幕区域复制到剪贴板,请将其粘贴到/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)
我认为您不需要访问剪贴板。 修改如下。
defaults write com.apple.screencapture location ~/screens/
killall SystemUIServer
ss2CB.plist
复制到~/Library/LaunchAgents/
。 ss2cb.py
复制到~/
。 Cmd + Shift + 4
&amp;进行测试粘贴吧!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'