Python Görsel Kırpma

Python kullanarak nasıl görsel kırpabilirim? Bir görselin sadece belirli bir alanını almak istiyorum.
Yardımcı olursanız sevinirim.

.,

2 Beğeni

Kullanıcının hangi koordinatlar arasının kırpılacağını kestirmesi uğraştırıcı olabileceği için, bir gui hazırladım. İsterseniz bu gui’ye bir göz atın.

  1. Programı çalıştırın.
  2. Open menü düğmesinden resim dosyasını seçin. Seçilen resim dosyası açılsın.
  3. Tıpkı paint programında yapıldığı gibi, kırpmak istediğiniz bölgenin sol üst köşesini belirleyip, fareyle ekrana bir kez tıklayın ve fare düğmesine basılı halde kırpılacak bölgenin sağ alt köşesine kadar fareyi hareket ettirin.
  4. Sağ alt köşeye gelip, basılı tuttuğunuz fare tuşunu serbest bırakın, karşınıza sizden dosya ismi yazmanızın istendiğini bir panel gelecektir. Dosyanın ismini yazın ve işlem tamamdır.
#!/usr/bin/python3.8
# -*- coding: utf-8 -*-

import tkinter as tk

from PIL import Image, ImageTk
from tkinter.filedialog import askopenfilename, asksaveasfilename


class Menu(tk.Menu):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.master.configure(menu=self)
        self.add_command(
            label="Open",
            command=self.open
        )
        
    def open(self):
        filename = askopenfilename()
        if filename:
            Canvas(filename=filename)
        

class Canvas(tk.Canvas):
    def __init__(self, filename, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.x1, self.x2, self.y1, self.y2 = 0, 0, 0, 0
        self.pack(expand=True, fill="both")
        self.objects = []
        self.image = Image.open(filename)
        self.ext = filename.split(".")[-1]
        self.img = ImageTk.PhotoImage(self.image)
        self.create_image((0, 0), image=self.img, anchor="nw")
        self.bind(
            sequence="<Button-1>", 
            func=self.on_button_press
        )
        self.bind(
            sequence="<ButtonRelease-1>", 
            func=lambda event: self.on_button_release()
        )
        
    def on_button_motion(self, event):
        self.x2, self.y2 = event.x, event.y
        for i in self.objects:
            self.delete(i)
        self.objects.append(
            self.create_rectangle((self.x1, self.y1, self.x2, self.y2))
        )

    def on_button_press(self, event):
        self.x1, self.y1 = event.x, event.y
        self.bind(
            sequence="<Motion>", 
            func=self.on_button_motion
        )
        
    def on_button_release(self):
        self.unbind("<Motion>")
        filename = asksaveasfilename() + "." + self.ext
        try:
            self.image.crop(
                (self.x1, self.y1, self.x2, self.y2)
            ).save(filename)
        except ValueError:
            pass
        for i in self.objects:
            self.delete(i)


root = tk.Tk()
Menu(master=root)
root.mainloop()
3 Beğeni

Yazdığınız program için teşekkürler ama ben aslında bir fotoğrafın belli bir bölgesini kırpan ve o bölgedeki yazıyı kaydeden bir program yazacağım. Görselden yazıyı okuma işini hallettim ama kırpma işini tam anlamadım. O yüzden konsol üzerinde çalışan ve benim verdiğim koordinatları kırpan bir program yazacağım.

Anladım, isterseniz kodlarda yer alan, kırpma işlemini yapan crop((*koordinatlar)) fonksiyonunu kullanabilirsiniz.

1 Beğeni