如何显示没有装饰的图像

时间:2016-12-16 18:27:18

标签: imagemagick

找不到Imagemagick的display命令选项以避免装饰。只需要显示图像,有没有办法实现这一点,或任何其他“核心”命令可以做到这一点?

1 个答案:

答案 0 :(得分:2)

我假设您的意思是显示没有窗口装饰的图像。有很多方法可以实现这一目标,但我想指出您的操作系统/桌面管理员可能有一些可以利用的东西。

例如,在我的Mac上,我可以使用open& qlmanage以最小的装饰显示图像。

# Use OS defaults
open wizard.png
# or Quicklook
qlmanage -p wizard.png

qlmanage

YMMV。列出了to this question列出了很多替代品。

ImageMagick的display实用程序包含选项-immutable-backdrop和& -window选项与X11显示系统交互。如果你不介意X11的标语栏,那么-immutable将隐藏其他显示小部件。

display -immutable -resize 40% wizard.png

immutable

但是,如果您绝对不想要任何窗口装饰,那么您可能需要为自己的解决方案提供角色。 -window选项会将图像设置为正在运行的窗口的背景。知道这一点,我只需要创建一个无边框窗口&捕获ID以传递给identify。请参阅this answer以创建没有任何装饰的窗口。

// simple_window (compile with `gcc -L/usr/X11R6/lib -lX11 -o simple_window simple_window.c')
#include <stdio.h>
#include <X11/Xlib.h>

int main(int argc, const char * argv[]) {
    Display * root;
    Window win;
    int screen;
    root = XOpenDisplay(NULL);
    screen = DefaultScreen(root);
    win = XCreateSimpleWindow(root,
                              RootWindow(root, screen),
                              10, 10,
                              400, 600,
                              0,
                              BlackPixel(root, screen),
                              WhitePixel(root, screen));
    Atom win_type = XInternAtom(root, "_NET_WM_WINDOW_TYPE", False);
    long value = XInternAtom(root, "_NET_WM_WINDOW_TYPE_DOCK", False);
    XChangeProperty(root,
                    win,
                    win_type,
                    4, 32,
                    PropModeReplace,
                    (unsigned char *) &value, 1);
    XMapWindow(root, win);
    printf("Window created %lu\n", win);
    XEvent e;
    while(1) {
        XNextEvent(root, &e);
        if (e.type == KeyPress) {
            break;
        }
    }
    XCloseDisplay(root);
    return 0;
}

编制上述程序&amp; running将打印出当前窗口id;其中,我现在可以通过import实用程序将图像作为背景写入。

no decorations

有点黑客,但是,YMMV。