#include #include #include #include #include #include #include #define SET_PROPS() \ imlib_image_attach_data_value ("quality", NULL, 100, NULL); \ imlib_image_attach_data_value ("compression", NULL, 10, NULL); \ imlib_image_attach_data_value ("interlacing", NULL, 1, NULL); #define THUMB_WIDTH 288 #define THUMB_HEIGHT 216 static Imlib_Image get_screenshot () { Window root; Display *disp; Screen *scr; if (!(disp = XOpenDisplay (getenv ("DISPLAY")))) return NULL; root = RootWindow (disp, DefaultScreen (disp)); scr = ScreenOfDisplay (disp, DefaultScreen (disp)); imlib_context_set_display (disp); imlib_context_set_drawable (root); imlib_context_set_visual (DefaultVisual (disp, DefaultScreen (disp))); imlib_context_set_colormap (DefaultColormap (disp, DefaultScreen (disp))); return imlib_create_image_from_drawable (0, 0, 0, scr->width, scr->height, 1); } int main (int argc, char **argv) { Imlib_Image im, tb; char file_shot[PATH_MAX + 1], file_thumb[PATH_MAX + 1]; int thumb_width = THUMB_WIDTH, thumb_height = THUMB_HEIGHT; if (argc > 0) { snprintf (file_shot, sizeof (file_shot), "%s", argv[1]); snprintf (file_thumb, sizeof (file_thumb), "%s", file_shot); } if (!file_shot) { fprintf (stderr, "No file given!\n"); return 1; } if (argc > 2) { thumb_width = atoi (argv[2]); thumb_height = atoi (argv[3]); } im = get_screenshot (); imlib_context_set_image (im); SET_PROPS(); imlib_save_image (strcat (file_shot, ".png")); /* create thumbnail */ tb = imlib_create_cropped_scaled_image (0, 0, imlib_image_get_width(), imlib_image_get_height(), thumb_width, thumb_height); imlib_context_set_image (tb); SET_PROPS(); imlib_save_image (strcat (file_thumb, "_tb.png")); imlib_free_image(); /* free screenshot, too */ imlib_context_set_image (im); imlib_free_image(); return 0; }