app.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
import tkinter as tk from tkinter import filedialog, messagebox import url_to_image from PIL import Image, ImageTk import os # Constants MAX_DISPLAY_SIZE = (400, 400) # Resize preview image to fit window def load_image(): global image_tk, pil_image # Keep reference url = url_entry.get().strip() if not url: messagebox.showwarning("Warning", "Please enter an image URL.") return try: pil_image = url_to_image.convert(url, "pil") # Get PIL image # Resize for display (doesn't affect actual image) preview_image = pil_image.copy() preview_image.thumbnail(MAX_DISPLAY_SIZE, Image.Resampling.LANCZOS) image_tk = ImageTk.PhotoImage(preview_image) image_label.configure(image=image_tk) image_label.image = image_tk download_button.config(state=tk.NORMAL) except Exception as e: messagebox.showerror("Error", f"Failed to load image.\n{e}") def download_image(): folder_selected = filedialog.askdirectory() if not folder_selected: return try: filename = os.path.basename(url_entry.get().split("/")[-1]) save_path = os.path.join(folder_selected, filename) pil_image.save(save_path) messagebox.showinfo("Success", f"Image saved to:\n{save_path}") except Exception as e: messagebox.showerror("Error", f"Failed to save image.\n{e}") # GUI setup root = tk.Tk() root.title("Image Viewer from URL") root.geometry("450x550") tk.Label(root, text="Paste Image URL:").pack(pady=(10, 0)) url_entry = tk.Entry(root, width=60) url_entry.pack(pady=5) load_button = tk.Button(root, text="Load Image", command=load_image) load_button.pack(pady=5) image_label = tk.Label(root) image_label.pack(pady=10) download_button = tk.Button(root, text="Download Image", command=download_image, state=tk.DISABLED) download_button.pack(pady=10) root.mainloop() |