Як скопіювати зображення у буфер обміну з файлу за допомогою командного рядка?


23

Я хотів би написати сценарій, щоб взяти файл зображення, масштабувати його на 50% і помістити в буфер обміну, щоб його можна було легко вставити. Біт, який я застряг, - це як розмістити зображення в буфері обміну.

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

EDIT

Завдяки відповіді Флоріана нижче, я зміг досягти того, що хотів, - зробити знімок екрана і автоматично масштабувати його до максимуму 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/…
Champ

Відповіді:


32

Використовуйте -tопцію, щоб вказати тип вмісту, наприклад

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

-tне працює на моїй версії xclip 0,12
Ірфан

@ Power-Inside: працює для мене з xclip 0,12 16.10
Флоріан Дієш

1
щоб почати це працювати 17.10, я повинен був зробити це:xclip -selection clipboard -t image/png -o > example.png
Анаке

Працює з xclip версією 0,12 на моєму Ubuntu 16.04.5 LTS
Champ

Працює лише для середовищ GTK, таких як Gnome, а не для середовищ Qt, таких як KDE / плазма або LXQT.
noraj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.