How to copy image to clipboard, to paste to another application?
scrot + xclip
You can use scrot
with xclip
to take a screenshot and copy it to clipboard.
scrot '/tmp/%F_%T_$wx$h.png' -e 'xclip -selection clipboard -target image/png -i $f'
It will capture whole of your screen and copy the image to clipboard. If you want to capture current window then use -u
flag. For selection of particular area, you can add -s
flag. See $ man scrot
for more options.
It will store your screenshot in /tmp
directory. You can change that directory wherever you want it to get stored. Files from /tmp
directory usually gets deleted after each reboot. If you want to immediately remove the stored file, then do something like:
scrot -w '/tmp/%F_%T_$wx$h.png' -e 'xclip -selection clipboard -target image/png -i $f && rm $f'
As I read in other comments, you need it for copying a screenshot to the clipboard. I hope this answers your question.
If you just need to copy an already existing image file to clipboard:
cat 2018-06-16-224938_670x730_scrot.png | xclip -selection clipboard -target image/png -i
You can set keyboard shortcuts/keybindings according to your current Desktop Environment/window manager.
Bonus
Explanation of /tmp/%F_%T_$wx$h.png
:
It's being used as the file name. These are called format specifiers
. They are of two type: starting with %
or $
.
%F Equivalent to %Y-%m-%d (the ISO 8601 date format). %T The time in 24-hour notation (%H:%M:%S).
%F_%T_
will print something like: 2018-06-17_02:52:19_
i.e. your current timestamp. You can customize the format as per your requirements. See $ man strftime
for more help.
$wx$h
are part of the scrot's internal specifiers.
$w image width $h image height
So the final file name will look something like 2018-06-17_02:52:19_1365x384.png
.
First, install python, and pygtk
sudo apt-get install python pygtk
Now save the following script somewhere as imgclip.py (see https://stackoverflow.com/questions/3571855/pasting-image-to-clipboard-in-python-in-linux)
#! /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()
copy_image(sys.argv[1]);
To use it:
python /path/to/imgclip.py filename.png
Note: tested pasting in gimp and xournal. Note: this is for gnome desktop (hence gtk). I bet there's something similar for kde
Install xclip
(be sure the version is 0.12+svn84, because 0.12 is not enough); then, add this line to the box in the compiz settings manager:
xclip -selection clipboard -target image/png -i
You should then be able to paste it to any other x application
Check out xclip
. It allows you to move text, or files to the clipboard from the command line.
EDIT:
There are command-line screenshot apps discussed in this post: http://www.linux.com/archive/feed/57772 including scrot
. This is from the scrot
man page:
scrot is a screen capture utility using the imlib2 library to aquire and save images. scrot has a few options, detailed below. Specify [file] as the filename to save the screenshot to.
One last option is to find an X app which just takes a screenshot when clicked (no prompts, dialogue boxes etc), assign it to a hotkey combination and use xdotool
to simulate that keypress from the command line??
I'd disable Compiz's screenshot feature, just Head over to System
-> Preferences
-> Keyboard Shortcuts
(under Desktop
category) and bind Print Screen to Take a Screenshot
Now whenever you hit PrintScreen a sreencapture will be taken with an option to copy to clipboard, or just to save the file.