Python - Pillow ImageShow.show() 不显示图像 (Raspbian)
Phython - Pillow ImageShow.show() isn't displaying images (Raspbian)
我想做的就是在 Raspberry Pi 3
上使用 Pillow 显示图像
首次尝试使用此代码:
from PIL import Image
from PIL import ImageShow
imageA = Image.open('Moth.png')
ImageShow.show(imageA)
print("Done")
它没有用,没有错误代码,什么都没有,它只是完全跳过了代码
我仔细研究了一下,发现图像显示器可能有问题,所以我尝试像这样添加它:
from PIL import Image
from PIL import ImageShow
imageA = Image.open('Moth.png')
ImageShow.show(imageA,title=None,command='GPicView')
print("Done")
也没用,我也试过安装fim和使用
ImageShow.show(imageA,title=None,command='fim')
就像本网站上建议的答案之一,但这也不起作用
我确定fim已经正确安装了,所以代码肯定有问题,但是我不明白是什么,也许我没有正确导入ImageShow?
我也试过使用
imageA.show(command='fim')
但它产生相同的结果
我是 Python 编码的新手(一般而言),所以也许我只是在做一些愚蠢的事情而没有意识到
更新答案
我认为 PIL/Pillow 的较新版本使用 xdg-open
命令来显示图像。在内部,PIL/Pillow 将您的 in-memory 图像保存为磁盘上的 PNG 文件并调用 OS 的查看器来查看 on-disk PNG。因此,我认为必须有一种方法可以将 MIME-type "image/png" 的默认查看器设置为您选择的查看器,但作为 Mac 用户,我不确定你会怎么做 - 我想可以使用 xdg-mime
命令。
原答案
我认为 PIL/Pillow 在 Unix/Linux 系统上显示时是这样的:
- 它期望并希望找到
display
,它是 ImageMagick 的一部分
- 它将使用
eog
“侏儒之眼” 如果找到它
- 它将回落到
xv
因此,根据您的skill-set、耐心、disk-space、使用特定查看器的愿望,有多种可能性。我不知道那些参数,所以这里有一些可能性:
选项: 安装 ImageMagick 使用:
sudo apt install imagemagick
选项: 安装 eog 使用:
sudo apt install eog
选项: 安装 xv - 我手头没有确切的命令
选项: 安装 feh 或其他一些查看器并将其符号链接到 display
所以 PIL/Pillow 认为它正在使用 ImageMagick display
sudo apt install feh
sudo ln -s /usr/bin/feh /usr/bin/display
另一种选择可能是创建一个自定义查看器作为从 PIL 的 UnixViewer
派生的 class,它将自己置于查看器列表的顶部,因此首先使用它。
因此,创建一个名为 "CustomViewer.py"
的文件,如下所示 - 我使用的是 feh
查看器,但您可以使用任何您喜欢的应用程序:
#!/usr/bin/env python3
import shutil
import sys
from PIL import Image, ImageShow
class CustomViewer(ImageShow.UnixViewer):
format = "PNG"
options = {"compress_level": 1}
def get_command_ex(self, file, **options):
command = executable = "feh"
return command, executable
if shutil.which("feh"):
print(f'Registering custom viewer for PIL')
ImageShow.register(CustomViewer, order=-1) # Insert as primary viewer
然后,在您要使用自定义查看器的常规 Python 代码中,只需添加:
import CustomViewer
它会输出一条消息,说明它已加载,任何后续调用 show()
都将使用您的自定义查看器。
我想做的就是在 Raspberry Pi 3
上使用 Pillow 显示图像首次尝试使用此代码:
from PIL import Image
from PIL import ImageShow
imageA = Image.open('Moth.png')
ImageShow.show(imageA)
print("Done")
它没有用,没有错误代码,什么都没有,它只是完全跳过了代码
我仔细研究了一下,发现图像显示器可能有问题,所以我尝试像这样添加它:
from PIL import Image
from PIL import ImageShow
imageA = Image.open('Moth.png')
ImageShow.show(imageA,title=None,command='GPicView')
print("Done")
也没用,我也试过安装fim和使用
ImageShow.show(imageA,title=None,command='fim')
就像本网站上建议的答案之一,但这也不起作用
我确定fim已经正确安装了,所以代码肯定有问题,但是我不明白是什么,也许我没有正确导入ImageShow?
我也试过使用
imageA.show(command='fim')
但它产生相同的结果
我是 Python 编码的新手(一般而言),所以也许我只是在做一些愚蠢的事情而没有意识到
更新答案
我认为 PIL/Pillow 的较新版本使用 xdg-open
命令来显示图像。在内部,PIL/Pillow 将您的 in-memory 图像保存为磁盘上的 PNG 文件并调用 OS 的查看器来查看 on-disk PNG。因此,我认为必须有一种方法可以将 MIME-type "image/png" 的默认查看器设置为您选择的查看器,但作为 Mac 用户,我不确定你会怎么做 - 我想可以使用 xdg-mime
命令。
原答案
我认为 PIL/Pillow 在 Unix/Linux 系统上显示时是这样的:
- 它期望并希望找到
display
,它是 ImageMagick 的一部分
- 它将使用
eog
“侏儒之眼” 如果找到它 - 它将回落到
xv
因此,根据您的skill-set、耐心、disk-space、使用特定查看器的愿望,有多种可能性。我不知道那些参数,所以这里有一些可能性:
选项: 安装 ImageMagick 使用:
sudo apt install imagemagick
选项: 安装 eog 使用:
sudo apt install eog
选项: 安装 xv - 我手头没有确切的命令
选项: 安装 feh 或其他一些查看器并将其符号链接到 display
所以 PIL/Pillow 认为它正在使用 ImageMagick display
sudo apt install feh
sudo ln -s /usr/bin/feh /usr/bin/display
另一种选择可能是创建一个自定义查看器作为从 PIL 的 UnixViewer
派生的 class,它将自己置于查看器列表的顶部,因此首先使用它。
因此,创建一个名为 "CustomViewer.py"
的文件,如下所示 - 我使用的是 feh
查看器,但您可以使用任何您喜欢的应用程序:
#!/usr/bin/env python3
import shutil
import sys
from PIL import Image, ImageShow
class CustomViewer(ImageShow.UnixViewer):
format = "PNG"
options = {"compress_level": 1}
def get_command_ex(self, file, **options):
command = executable = "feh"
return command, executable
if shutil.which("feh"):
print(f'Registering custom viewer for PIL')
ImageShow.register(CustomViewer, order=-1) # Insert as primary viewer
然后,在您要使用自定义查看器的常规 Python 代码中,只需添加:
import CustomViewer
它会输出一条消息,说明它已加载,任何后续调用 show()
都将使用您的自定义查看器。