当前用例:
- 我选择在 Safari 中的一些随机 png 上“复制图像”。
- 我在终端中输入 pbpaste,并获取图像的链接。
有没有办法获取二进制数据?
答案1
有一个适合您用例的实用程序:pngpaste
https://github.com/jcsalterego/pngpaste
您可以使用安装(稍旧一点的)版本brew install pngpaste
,或者只需使用 git clone/make latest version。
答案2
当你复制图像时,OS X 实际上并不只是复制原始图像数据。事实上,Cocoa 中存在多个粘贴板,其中包含图像的多个表示形式。
您唯一的选择pbpaste
是选择访问哪个粘贴板,而不是访问哪种类型的内容。虽然原始十六NSData
进制存储在粘贴板中的某个位置,可以粘贴到图像编辑工具中,但您无法将pbpaste
其粘贴到只接受文本的终端上。从pbpaste
手册页:
它通常首先在剪贴板中查找纯文本数据,并将其写入标准输出
由于纯文本数据可用作图像的 URL,因此无论如何您都可以粘贴该数据。
没有办法告诉 pbpaste 只获取指定的数据类型。
为了完整起见,这里是存储的图像的 URL,例如:
截图粘贴板检查器。
答案3
复制自我的回答这里。
您需要安装gmktemp
(GNU mktemp
)。(例如,使用brew install coreutils
。)
以下是zsh
代码;它可能适用于,也可能不适用于bash
。
pngpaste () {
local name="${1}" extension="${2:-png}" class="${3}"
test -z "$class" && class='«class PNGf»'
local stdout=''
if [[ "$name" == '-' ]]
then
name="$(gmktemp --suffix ".${extension}")" || return $?
stdout=y
fi
local dir
dir="$(dirname "$name")"
if test -z "$dir"
then
dir="$PWD"
fi
dir="$(realpath "$dir")"
mkdir -p "$dir" || return $?
name="$(basename "$name")"
if test -z "${name}"
then
name+="some" || return $?
fi
[[ "$name" =~ '\.'${extension}'$' ]] || name+=".${extension}"
local f="${dir}/${name}"
if test -e "$f"
then
command rm "$f"
fi
osascript -e "tell application \"System Events\" to ¬
write (the clipboard as ${class}) to ¬
(make new file at folder \"${dir}\" with properties ¬
{name:\"${name}\"})" || return $?
if test -n "$stdout"
then
cat "$f"
command rm "$f"
fi
}
用法:
pngpaste some_path.png
pngpaste - | base64
答案4
您可以尝试在十六进制编辑器中打开图像来访问原始文件,我已经在我的 Mac 上使用了 Hex Fiend,它可以完成这项工作。