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

Example in compiz

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

enter image description here


Now whenever you hit PrintScreen a sreencapture will be taken with an option to copy to clipboard, or just to save the file.

enter image description here