|
| 1 | +from tkinter import * |
| 2 | +from tkinter.filedialog import askopenfilename |
| 3 | +from tkinter import messagebox |
| 4 | +from PIL import Image, ImageDraw, ImageFont |
| 5 | + |
| 6 | +FONT_NAME = "Courier" |
| 7 | +GREEN = "#9bdeac" |
| 8 | +YELLOW = "#f7f5dd" |
| 9 | + |
| 10 | +root = Tk() |
| 11 | +root.title('IMG_WATERMARK') |
| 12 | +root.config(padx=25, pady=25) |
| 13 | +img_file = '' |
| 14 | + |
| 15 | + |
| 16 | +def watermark(img_input, img_output, text_watermark, xy_pos): |
| 17 | + image = Image.open(img_input) |
| 18 | + |
| 19 | + edit_image = ImageDraw.Draw(image) |
| 20 | + |
| 21 | + sky_blue = (135, 206, 235) |
| 22 | + font_watermark = ImageFont.truetype("arial.ttf", 200) |
| 23 | + edit_image.text(xy_pos, text_watermark, font=font_watermark, fill=sky_blue) |
| 24 | + image.show() |
| 25 | + image.save(img_output) |
| 26 | + |
| 27 | + |
| 28 | +def select_file(): |
| 29 | + global img_file |
| 30 | + img_file = askopenfilename() |
| 31 | + |
| 32 | + |
| 33 | +def watermark_img(): |
| 34 | + if img_file == '': |
| 35 | + messagebox.showerror("No image found", "Please select an image first.") |
| 36 | + else: |
| 37 | + img_output = f'watermarked.jpg' |
| 38 | + text_watermark = text_entry.get() |
| 39 | + watermark(img_file, img_output, text_watermark=text_watermark, xy_pos=(100, 100)) |
| 40 | + messagebox.showinfo("Complete", "Successfully watermarked!") |
| 41 | + |
| 42 | + |
| 43 | +title_label = Label(text="IMG Watermark", font=(FONT_NAME, 50, "bold"), fg=GREEN, bg=YELLOW) |
| 44 | +title_label.grid(column=0, row=1, rowspan=4) |
| 45 | + |
| 46 | +b1 = Button(root, text="1. Select IMG", font=20, width=15, |
| 47 | + command=select_file) |
| 48 | +b2 = Button(root, text="3. Watermark IMG", font=20, width=15, |
| 49 | + command=watermark_img) |
| 50 | +b1.grid(column=1, row=1, columnspan=2, padx=25, pady=25) |
| 51 | +b2.grid(column=1, row=4, columnspan=2, padx=25, pady=25) |
| 52 | + |
| 53 | +text_label = Label(text="2. Watermark Text", font=20) |
| 54 | +text_label.grid(column=1, row=2, padx=25, pady=25) |
| 55 | +text_entry = Entry(width=26) |
| 56 | +text_entry.grid(column=1, row=3) |
| 57 | + |
| 58 | +root.mainloop() |
0 commit comments