Tkinter错误:无法识别图像文件中的数据

时间:2017-11-17 18:31:37

标签: python macos python-3.x canvas tkinter

我正在尝试将jpg图像放到tkinter画布上。 tkinter给了我这个错误:

  

无法识别图像文件中的数据

我使用文档中的代码:

\n

与png图像相同。甚至试图将图像放入标签小部件,但得到了同样的错误。怎么了?

我在Mac上使用Python 3。 Python文件和图像位于同一文件夹中。

5 个答案:

答案 0 :(得分:7)

您的代码似乎正确,这是在Windows 7上运行的(Python 3.6):

 <!DOCTYPE html>
<meta charset="utf-8">
<head>
   <meta name="viewport" content="width=device-width, initial-scale=1" />
   <link rel="stylesheet" type="css/text" href="">
   <title>Json and Ajax</title>
</head>
<style>

    h1
    {
        margin-bottom: 60px;
    }

    .boxvalue
    {
        width:150px;
        height: 150px;
        border: 2px solid rgb(199, 91, 91);
        display: inline-block;
        margin: 20px;
    }

    .Colorname
    {
        font-size: 18px;
        font-weight: 600;
        margin: 20px;
        display: inline-block;
        text-align: center;
    }
</style>
<body>
<div class="container-fluid">
    <header>
      <h1>Colors</h1>
    </header>
   <div id="ColorArea">

   </div>
</div>
    <script src="colorequest.js"></script>
 </body>

产生了这个tkinter GUI:

GUI将此图片设为from tkinter import * root = Tk() canv = Canvas(root, width=80, height=80, bg='white') canv.grid(row=2, column=3) img = PhotoImage(file="bll.jpg") canv.create_image(20,20, anchor=NW, image=img) mainloop() image

(imgur将其转换为bll.jpg,但这也适用于我。)

更多选项:

  • This answer提及,tkinter仅适用于bll.png张图片。尝试使用gif图片。
  • 如果这不起作用,请按照this answer
  • 中的说明使用.gif

更新PIL的解决方案:

PIL

答案 1 :(得分:4)

我遇到了同样的问题。我有Windows和Python 3.6。因此,我为此找到了两种解决方案:您使用/转换为.png图片(具有与您使用的功能相同的功能):

photo = PhotoImage('xyz.png')
l = Label(image = photo)
l.pack()

或者如果您只想读取.jpg文件,则使用PIL库读取并显示如下图像:

from PIL import ImageTk, Image
img = ImageTk.PhotoImage(Image.open("xyz.jpg"))  
l=Label(image=img)
l.pack()

答案 2 :(得分:1)

通过以下方式安装PIL /枕头:

pip install Pillow

或:

sudo pip install pillow
from PIL import Image
from PIL import ImageTk
import tkinter

image = Image.open('bll.jpg')
image = image.resize((20, 20))
image = ImageTk.PhotoImage(image)

canv = Canvas(root, width=80, height=80, bg='white')
canv.grid(row=2, column=3)

img = PhotoImage(file=image)

对于Tkinter,也可以使用.PNG而不是.JPG。

答案 3 :(得分:0)

列表的另一种替代解决方案...

filename = ImageTk.PhotoImage(Image.open('imagename.jpeg' )) background_label = tk.Label(self.root, image=filename) background_label.place(x=0, y=0, relwidth=1, relheight=1)

答案 4 :(得分:0)

为Python安装OpenCV软件包:

pip install opencv-python

然后尝试以下代码:

import cv2
Img = cv2.imread("xxxxx.png") 
cv2.imwrite("xxxxx.png",img) 
# Your code goes here!