如何将图像粘贴到命令行中?

如何将图像粘贴到命令行中?

当前用例:

  1. 我选择在 Safari 中的一些随机 png 上“复制图像”。
  2. 我在终端中输入 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,它可以完成这项工作。

http://ridiculousfish.com/hexfiend/

相关内容