इस सरल लेकिन उपयोगी टूल से, जिसे आप स्वयं बना सकते हैं, पायथन में छवि प्रबंधन के बारे में सब कुछ सीखें।
कोलाज यादों को प्रदर्शित करने और छवियों के सेट प्रदर्शित करने का एक सुंदर तरीका है। ऑनलाइन कोलाज निर्माताओं को सुरक्षा संबंधी चिंताएँ हो सकती हैं और ऑफ़लाइन ऐप्स में पैसे खर्च हो सकते हैं और आपके लिए आवश्यक सुविधाओं का अभाव हो सकता है।
अपना स्वयं का छवि कोलाज निर्माता बनाकर आप इन चिंताओं को दूर कर सकते हैं और पूर्ण नियंत्रण बनाए रख सकते हैं। तो, आप इसे कैसे बना सकते हैं?
टिंकर और पीआईएल मॉड्यूल
एक छवि कोलाज एप्लिकेशन बनाने के लिए आपको टिंकर और पीआईएल मॉड्यूल की आवश्यकता होती है। टिंकर आपको डेस्कटॉप एप्लिकेशन बनाने की अनुमति देता है। यह विभिन्न प्रकार के विजेट प्रदान करता है जो इसे आसान बनाते हैं जीयूआई विकसित करना.
पिलो लाइब्रेरी - पायथन इमेजिंग लाइब्रेरी (पीआईएल) का एक कांटा - छवि प्रसंस्करण क्षमताएं प्रदान करता है जो संपादन, निर्माण में मदद करता है। फ़ाइल स्वरूपों को परिवर्तित करना, और छवियाँ सहेजना।
टिंकर और पिलो स्थापित करने के लिए, एक टर्मिनल खोलें और चलाएं:
pip install tk pillow
जीयूआई सेटअप और छवि हेरफेर
आप इस प्रोजेक्ट का सोर्स कोड इसमें पा सकते हैं गिटहब रिपॉजिटरी.
से शुरू करें आवश्यक मॉड्यूल आयात करना. एक क्लास बनाएं, ImageCollageApp, और विंडो का शीर्षक और आयाम सेट करें। का उपयोग करके कैनवास को परिभाषित करें टी.के. कैनवास() और इसका मूल तत्व, चौड़ाई, ऊंचाई और पृष्ठभूमि रंग सेट करें।
import tkinter as tk
from tkinter import filedialog, simpledialog, messagebox
from PIL import Image, ImageTkclassImageCollageApp:
def__init__(self, root):
self.root = root
self.root.title("Image Collage Maker")
self.images = []
self.image_refs = []
self.collage_size = (600, 500)self.collage_canvas = tk.Canvas(
self.root,
width=self.collage_size[0],
height=self.collage_size[1],
bg="white",
)
self.collage_canvas.pack()
दो बटन बनाएं: छवि जोड़ें, और कोलाज बनाएं. मूल तत्व, प्रदर्शित करने के लिए पाठ, चलाने के लिए आदेश और फ़ॉन्ट शैलियों को परिभाषित करें। उपयुक्त पैडिंग जोड़कर बटनों को व्यवस्थित करें। प्रारंभ खींचें_डेटा ड्रैगिंग ऑपरेशन के बारे में जानकारी संग्रहीत करने के लिए।
प्रारंभ छवि_स्थिति कैनवास पर छवियों की स्थिति को संग्रहीत करने के लिए। छवियों के चयन, खींचने और जारी करने पर प्रतिक्रिया देने के लिए तीन ईवेंट हैंडलर को परिभाषित करें।
self.btn_add_image = tk.Button(
self.root,
text="Add Image",
command=self.add_images,
font=("Arial", 12, "bold"),
)self.btn_add_image.pack(pady=10)
self.btn_create_collage = tk.Button(
self.root,
text="Create Collage",
command=self.create_collage,
font=("Arial", 12, "bold"),
)
self.btn_create_collage.pack(pady=5)
self.drag_data = {"x": 0, "y": 0, "item": None}
self.image_positions = []
self.collage_canvas.bind("" , self.on_press)
self.collage_canvas.bind("" , self.on_drag)
self.collage_canvas.bind("" , self.on_release)
एक विधि परिभाषित करें, on_press. उस स्थान से निकटतम कैनवास आइटम पुनर्प्राप्त करें जहां उपयोगकर्ता माउस पर क्लिक करता है और इसे नीचे संग्रहीत करता है वस्तु की कुंजी खींचें_डेटा शब्दकोष। माउस क्लिक के x और y निर्देशांक संग्रहीत करें। आप इसका उपयोग यह गणना करने के लिए करेंगे कि उपयोगकर्ता खींचने के दौरान माउस को कितनी दूरी तक ले जाता है।
defon_press(self, event):
self.drag_data["item"] = self.collage_canvas.find_closest(event.x, event.y)[0]
self.drag_data["x"] = event.x
self.drag_data["y"] = event.y
एक विधि परिभाषित करें, on_drag. खींचने के दौरान उपयोगकर्ता द्वारा माउस को ले जाने वाली क्षैतिज और ऊर्ध्वाधर दूरी की गणना करें और तदनुसार छवि की स्थिति को अपडेट करें। छवि के अद्यतन निर्देशांक को के अंतर्गत संग्रहीत करें एक्स और य की चाबियाँ खींचें_डेटा शब्दकोष।
defon_drag(self, event):
delta_x = event.x - self.drag_data["x"]
delta_y = event.y - self.drag_data["y"]
self.collage_canvas.move(self.drag_data["item"], delta_x, delta_y)
self.drag_data["x"] = event.x
self.drag_data["y"] = event.y
एक विधि परिभाषित करें, रिहाई पर. उपयोगकर्ता जिस छवि को उसके निर्देशांकों के साथ खींच रहा था उसका संदर्भ साफ़ करें। बुलाएं update_image_positions उपयोगकर्ता द्वारा कैनवास को खींचने और छोड़ने के बाद कैनवास पर सभी छवियों की स्थिति को अद्यतन करने के लिए।
defon_release(self, event):
self.drag_data["item"] = None
self.drag_data["x"] = 0
self.drag_data["y"] = 0
self.update_image_positions()
एक विधि परिभाषित करें, update_image_positions. इसे क्लियर करें छवि_स्थिति सभी कैनवास आइटमों को सूचीबद्ध करें और पुनरावृत्त करें। प्रत्येक आइटम के लिए, निर्देशांक ढूंढें और उन्हें सूची में जोड़ें।
defupdate_image_positions(self):
self.image_positions.clear()
for item in self.collage_canvas.find_all():
x, y = self.collage_canvas.coords(item)
self.image_positions.append((x, y))
एक विधि परिभाषित करें, छवियां जोड़ें. एक संवाद बॉक्स बनाएं जो उपयोगकर्ता को कोलाज के लिए छवियों की संख्या दर्ज करने के लिए प्रेरित करे। यदि उपयोगकर्ता ने एक वैध संख्या प्रदान की है, तो एक फ़ाइल संवाद बॉक्स खोलें जो उपयोगकर्ता को केवल छवि फ़ाइलों का चयन करने की अनुमति देता है। एक बार जब उपयोगकर्ता एक या अधिक छवियों का चयन कर ले, तो प्रत्येक को पिलो से खोलें छवि.खुला() तरीका।
बुलाएं चित्र को पुनर्कार करें विधि और एक टिंकर-संगत बनाएं फोटोछवि. इसे इसमें जोड़ें image_refs सूची बनाएं और कॉल करें update_canvas तरीका।
defadd_images(self):
num_images = simpledialog.askinteger(
"Number of Images", "Enter the number of images:"
)if num_images isnotNone:
file_paths = filedialog.askopenfilenames(
filetypes=[("Image files", "*.png;*.jpg;*.jpeg;*.gif")]
)if file_paths:
for i in range(min(num_images, len(file_paths))):
file_path = file_paths[i]
image = Image.open(file_path)
resized_image = self.resize_image(image)
self.images.append(resized_image)
self.image_refs.append(ImageTk.PhotoImage(resized_image))
self.update_canvas()
एक विधि परिभाषित करें, चित्र को पुनर्कार करें. छवि की चौड़ाई और ऊंचाई प्राप्त करें और इसके पहलू अनुपात की गणना करें। यदि यह एक से अधिक है, तो नई चौड़ाई को कोलाज की चौड़ाई की आधी पर सेट करें। पहलू अनुपात को बनाए रखते हुए संबंधित नई ऊंचाई की गणना करें।
यदि पहलू अनुपात एक से कम है, तो नई ऊंचाई को कोलाज की ऊंचाई की आधी पर सेट करें। इसी प्रकार, संगत चौड़ाई की गणना करें। तकिए का प्रयोग करें आकार परिकलित मापदंडों का उपयोग करके एक संशोधित छवि वापस करने की विधि।
defresize_image(self, image):
img_width, img_height = image.size
aspect_ratio = img_width / img_heightif aspect_ratio > 1:
new_width = self.collage_size[0] // 2
new_height = int(new_width / aspect_ratio)
else:
new_height = self.collage_size[1] // 2
new_width = int(new_height * aspect_ratio)
return image.resize((new_width, new_height))
एक विधि परिभाषित करें, update_canvas. सभी आइटम साफ़ करें और फ़ाइल संवाद बॉक्स के माध्यम से उपयोगकर्ता से पंक्तियों और स्तंभों की वांछित संख्या पूछें। निर्दिष्ट कोलाज आकार का आधा लेने के लिए कोलाज की चौड़ाई और ऊंचाई निर्धारित करें। छवि स्थितियों की सूची साफ़ करता है. प्रारंभ एक्स और य शून्य पर ऑफसेट करें, ताकि आप पंक्तियों और स्तंभों में छवियों को व्यवस्थित करने के लिए स्थिति ऑफसेट का ट्रैक रख सकें।
defupdate_canvas(self):
self.collage_canvas.delete("all")
rows = simpledialog.askinteger("Number of Rows", "Enter the number of rows:")cols = simpledialog.askinteger(
"Number of Columns", "Enter the number of columns:"
)
collage_width = self.collage_size[0] * cols // 2
collage_height = self.collage_size[1] * rows // 2
self.collage_canvas.config(width=collage_width, height=collage_height)
self.image_positions.clear()
x_offset, y_offset = 0, 0
पर पुनरावृति करें image_refs सूची बनाएं और निर्दिष्ट ऑफसेट का उपयोग करके कैनवास पर एक छवि बनाएं। एंकर को उत्तर-पश्चिम पर सेट करें ताकि आप छवि के ऊपरी-बाएँ कोने को निर्दिष्ट निर्देशांक पर रखें। इन निर्देशांकों को इसमें जोड़ें छवि_स्थिति सूची।
अद्यतन करें x_ऑफ़सेट अगली छवि रखने की तैयारी के लिए, कोलाज की आधी चौड़ाई जोड़ने के लिए। यदि वर्तमान पंक्ति में रखी गई छवियों की संख्या निर्दिष्ट स्तंभों की संख्या का गुणज है, तो सेट करें x_ऑफ़सेट शून्य करने के लिए. यह एक नई पंक्ति की शुरुआत का संकेत देता है। सेट करने के लिए कोलाज की आधी ऊंचाई जोड़ें य अगली पंक्ति के लिए समन्वय करें.
for i, image_ref in enumerate(self.image_refs):
self.collage_canvas.create_image(
x_offset, y_offset, anchor=tk.NW, image=image_ref
)self.image_positions.append((x_offset, y_offset))
x_offset += self.collage_size[0] // 2
if (i + 1) % cols == 0:
x_offset = 0
y_offset += self.collage_size[1] // 2
कोलाज बनाना और उसे सहेजना
एक विधि परिभाषित करें, create_colage. यदि कोलाज पर कोई छवियाँ नहीं हैं, तो एक चेतावनी प्रदर्शित करें। कोलाज की चौड़ाई और ऊँचाई एकत्रित करें। एक तकिया बनाएं छवि सफ़ेद पृष्ठभूमि के साथ. के माध्यम से पुनरावृत्त करें इमेजिस प्रत्येक छवि को सूचीबद्ध करें और निर्दिष्ट स्थानों पर पृष्ठभूमि पर चिपकाएँ।
कोलाज सहेजें और इसे डिफ़ॉल्ट छवि व्यूअर का उपयोग करके प्रदर्शित करें।
defcreate_collage(self):
if len(self.images) == 0:
messagebox.showwarning("Warning", "Please add images first!")
returncollage_width = self.collage_canvas.winfo_width()
collage_height = self.collage_canvas.winfo_height()
background = Image.new("RGB", (collage_width, collage_height), "white")for idx, image in enumerate(self.images):
x_offset, y_offset = self.image_positions[idx]
x_offset, y_offset = int(x_offset), int(y_offset)paste_box = (
x_offset,
y_offset,
x_offset + image.width,
y_offset + image.height,
)background.paste(image, paste_box)
background.save("collage_with_white_background.jpg")
background.show()
टिंकर का एक उदाहरण बनाएं और इमेजकोलाज ऐप कक्षा। मुख्य घेरा() फ़ंक्शन पायथन को टिंकर ईवेंट लूप चलाने और विंडो बंद करने तक ईवेंट सुनने के लिए कहता है।
if __name__ == "__main__":
root = tk.Tk()
app = ImageCollageApp(root)
root.mainloop()
इमेज कोलाज मेकर की विभिन्न विशेषताओं का परीक्षण
प्रोग्राम चलाने पर, दो बटनों वाली एक विंडो दिखाई देती है, छवि जोड़ें, और कोलाज बनाएं. क्लिक करने पर छवि जोड़ें बटन, एक संवाद बॉक्स कोलाज के लिए छवियों की संख्या पूछता है। छवियों की संख्या पाँच दर्ज करने और उनका चयन करने पर एक अन्य संवाद बॉक्स प्रकट होता है। यह पंक्तियों की संख्या के बाद स्तंभों की संख्या पूछता है।
दो पंक्तियों और तीन स्तंभों में प्रवेश करने पर, विंडो छवियों को ग्रिड संरचना में व्यवस्थित करती है।
पूर्वावलोकन छवियों को इच्छानुसार खींचने की क्षमता देता है। क्लिक करने पर कोलाज बनाएं बटन, प्रोग्राम छवि को सहेजता है।
छवि को देखने पर, आप पुष्टि कर सकते हैं कि प्रोग्राम ने कोलाज सफलतापूर्वक बनाया है।
छवि कोलाज निर्माता की कार्यक्षमता को बढ़ाना
सारणीबद्ध प्रारूप के बजाय, आप उपयोगकर्ता को चुनने के लिए अलग-अलग डिफ़ॉल्ट टेम्पलेट प्रदान कर सकते हैं। पृष्ठभूमि का रंग बदलने, टेक्स्ट जोड़ने, छवियों पर फ़िल्टर लागू करने और इंटरनेट से स्टिकर डालने की सुविधाएँ जोड़ें।
इन सुविधाओं को जोड़ते समय, पूर्ववत या फिर से करने के विकल्प के साथ कोलाज को संपादित करना आसान बनाएं। उपयोगकर्ता को उनकी पसंद के अनुसार छवियों को क्रॉप करने, आकार बदलने और फ़्लिप करने दें। आपको छवि को उनके इच्छित प्रारूप में सहेजने का विकल्प भी जोड़ना चाहिए।