Как скопировать изображение в буфер обмена из файла с помощью командной строки?


23

Я хотел бы написать скрипт для файла изображения, масштабировать его на 50% и поместить в буфер обмена, чтобы его можно было легко вставить. Я застрял в том, как поместить изображение в буфер обмена.

Я знаю о xclip, но AFAICS, который имеет дело только с текстом. Возможно ли иметь изображение в буфере обмена без приложения, которое его сгенерировало? - Извините, я не уверен во внутренностях того, как работает буфер обмена!

РЕДАКТИРОВАТЬ

Благодаря приведенному ниже ответу Флориана я смог добиться того, чего хотел, а именно: сделать снимок экрана и автоматически масштабировать его до 600 пикселей в ширину (например, для вставки в электронное письмо). Еще одна проблема, с которой я столкнулся, заключалась в том, что Thunderbird не принимает image/pngиз буфера обмена. Я обошел это, преобразовав его text/htmlс помощью dataURL. Вот мой код на случай, если кто-нибудь найдет его полезным:

#!/bin/bash
TMP=/tmp/screenshot.png
function screenshotfail {
  notify-send -u low -i image "Screenshot failed."
  exit
}
# Take screenshot
gnome-screenshot -a -b -p -f "$TMP" || screenshotfail
# Ensure it's max 600px wide
mogrify -resize '>600x' "$TMP" || screenshotfail
# optimise the png if optipng is installed.
which optipng >/dev/null && optipng "$TMP"

# Copy to clipboard.
#
# This is what does not work for Thunderbird:
#   xclip -selection clipboard -t image/png <"$TMP" || screenshotfail
# But this does:
echo "<img src='data:image/png;base64,"$(base64 -w0 "$TMP")"' />" | \
  xclip -selection clipboard -t text/html || screenshotfail

# Remove the temp file.
rm -f "$TMP"

# Notify user.
notify-send -u low -i image "600px screenshot copied to clipboard"

Кажется, дубликат: unix.stackexchange.com/questions/30093/…
Чемпион

Ответы:


32

Используйте -tопцию для указания типа контента, например

xclip -selection clipboard -t image/png -i example.png

-tне работает на моей версии xclip 0.12
Irfan

@ Power-Inside: у меня работает с xclip 0.12 16.10
Флориан Диш

1
чтобы заставить это работать 17.10, я должен был сделать это:xclip -selection clipboard -t image/png -o > example.png
Anake

Работает с xclip версии 0.12 на моем Ubuntu 16.04.5 LTS
Champ

Работает только для сред GTK, таких как Gnome, но не для сред Qt, таких как KDE / plasma или LXQT.
noraj
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.