简体   繁体   中英

Converting Images PNG to JPG in python

As you can see my code for converting to png to jpg. I am getting so many errors in below the code.What I have to do? Can any one tell how to resolve the issue.

import tkinter as tk
from tkinter import filedialog
from PIL import Image

root = tk.Tk()

canvas1 = tk.Canvas(root, width=300, height=250, bg='azure3', relief='raised')
canvas1.pack()

label1 = tk.Label(root, text='File Conversion Tool', bg='azure3')
label1.config(font=('helvetica', 20))
canvas1.create_window(150, 60, window=label1)

def getPNG():
    global im1

    import_file_path = filedialog.askopenfilename()
    im1 = Image.open(import_file_path)


browseButton_PNG  = tk.Button(text="      Import PNG File     ",command=getPNG, bg='royalblue', fg='white', font=('helvetica', 12, 'bold'))
canvas1.create_window(150, 130, window=browseButton_PNG)

def convertToJPG():
    global im1
    export_file_path = filedialog.asksaveasfilename(defaultextension='.jpg')
    im1.save(export_file_path)

saveAsButton_JPG = tk.Button(text='Convert PNG To JPG', command=convertToJPG, bg='royalblue', fg='white', font=('helvetica', 12, 'bold'))
canvas1.create_window(150, 180, window=saveAsButton_JPG)

root.mainloop()

Output

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\yashk\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:/Users/yashk/PycharmProjects/png_to_jpg_convertor/png_to_jpg.py", line 27, in convertToJPG
    im1.save(export_file_path)
NameError: name 'im1' is not defined

here my attempt at making your code work:

import tkinter as tk
from tkinter import filedialog
from PIL import Image

pippo = tk.Tk()

canvas1 = tk.Canvas(pippo, width=300, height=250, bg='azure3', relief='raised')
canvas1.pack()

label1 = tk.Label(pippo, text='File Conversion Tool', bg='azure3')
label1.config(font=('helvetica', 20))
canvas1.create_window(150, 60, window=label1)

im1 = None

def getPNG():
    global im1

    import_file_path = filedialog.askopenfilename()
    im1 = Image.open(import_file_path).convert('RGB')
    saveAsButton_JPG["state"] = "normal"
    
    
browseButton_PNG  = tk.Button(text="      Import PNG File     ",command=getPNG, bg='royalblue', fg='white', font=('helvetica', 12, 'bold'))
canvas1.create_window(150, 130, window=browseButton_PNG)




def convertToJPG():
    global im1
    export_file_path = filedialog.asksaveasfilename(defaultextension='.jpg')
    im1.save(export_file_path)
    im1 = None

saveAsButton_JPG = tk.Button(text='Convert PNG To JPG', command=convertToJPG, bg='royalblue', fg='white', font=('helvetica', 12, 'bold'))
canvas1.create_window(150, 180, window=saveAsButton_JPG)



# pippo.mainloop()

LOOP_ACTIVE = True
while LOOP_ACTIVE:
    if im1 == None:
        saveAsButton_JPG["state"] = "disabled"
    else:
        browseButton_PNG['fg'] = 'red'
    pippo.update()

let me know if its better, I changed root.mainloop() whit a while True infinite loop that does root.update() and check if an image has been selected, if not the convert button is disabled, after each conversion the image selected is removed from memory so the convert button gets disabled. Selecting a png image does enable the convert button, and makes select button text red

I am adding input:

在此处输入图像描述

and output:

在此处输入图像描述 because OP says it doesnt work

Stack overflow has a number of answers to this question. type the following into stack overflow search tool.

is:Convert png to jpeg using Pillow

Here is a code snippet that converts png to jpg and can resize at the same time.


import os
import tkinter as tk
from tkinter import filedialog as fido
from PIL import Image

master = tk.Tk()

# Choose True and set relevant x,y dimensions
resize, x, y = False, 500, 500

def convert():

    image_name = fido.askopenfilename(title = "Pick a png file")
    if image_name:

        image_png, image_ext = os.path.splitext(image_name)
        # Check before loading!
        if image_ext.lower() == ".png":

            if resize:
                im = Image.open(image_name).resize(( x, y ))
            else:
                im = Image.open(image_name)

            # Check after loading!
            if im.mode != "RGB":

                # Do it
                rgb_im = im.convert("RGB")
                image_jpg = image_png + ".jpg"
                rgb_im.save(image_jpg, quality = 95)
                print("Complete! Converted png to jpg")

            else:
                print("Failed! Not a real png file")
            # clean up
            im.close()
        else:
            print("Failed! Not a png file")
    else:
        print("Cancel png to jpg conversion")

    master.destroy()

b = tk.Button(
    master, text = "Convert PNG to JPG", command = convert)
b.pack(fill = tk.BOTH, expand = True)

master.mainloop()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM