【发布时间】:2016-12-16 18:27:17
【问题描述】:
找不到 Imagemagick 的 display 命令的选项来避免装饰。只需要显示图像,有没有什么办法可以做到这一点,或者任何其他“核心”命令可以做到这一点?
【问题讨论】:
标签: imagemagick
找不到 Imagemagick 的 display 命令的选项来避免装饰。只需要显示图像,有没有什么办法可以做到这一点,或者任何其他“核心”命令可以做到这一点?
【问题讨论】:
标签: imagemagick
我假设您的意思是显示没有 window 装饰的图像。有很多方法可以实现这一点,但我想指出,您的操作系统/桌面管理器可能有一些您可以利用的东西。
例如,在我的 Mac 上,我可以使用 open 和 qlmanage 来显示带有最少装饰的图像。
# Use OS defaults
open wizard.png
# or Quicklook
qlmanage -p wizard.png
YMMV。 to this question 也列出了很好的替代方案。
ImageMagick 的 display 实用程序具有选项 -immutable、-backdrop 和 -window 选项以与 X11 显示系统交互。如果您不介意 X11 的磁贴栏,那么-immutable 将隐藏额外的显示小部件。
display -immutable -resize 40% wizard.png
但是,如果您绝对不想要任何窗户装饰,那么您可能需要制定自己的解决方案。 -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;
}
编译以上程序&运行会打印出当前窗口id;其中,我现在可以通过 import 实用程序将图像写入背景。
有点骇人听闻,但又是 YMMV。
【讨论】:
-I /opt/X11/include 添加到我的 iMac 上的编译命令中,顺便说一句。