पीआईएल का उपयोग करके छवि कैसे क्रॉप करें?


134

मैं दी गई छवि से पहली 30 पंक्तियों और अंतिम 30 पंक्तियों को हटाकर रास्ते में छवि को क्रॉप करना चाहता हूं। मैंने खोज की है, लेकिन सटीक समाधान नहीं मिला। क्या किसी के पास कुछ सुझाव हैं?

जवाबों:


196

एक crop()विधि है:

w, h = yourImage.size
yourImage.crop((0, 30, w, h-30)).save(...)

1
हां, मुझे पता है कि छवि को क्रॉप करने के लिए im.crop (बॉक्स) का उपयोग किया जाता है। लेकिन मैं छवि के ऊपरी और निचले हिस्से को केवल बाएं और दाएं भाग में नहीं रखना चाहता हूं, हालांकि बॉक्स () 4 टपल ले रहा है लेकिन मुझे यह नहीं मिल रहा है कि छवि के ऊपरी और निचले हिस्से को कैसे क्रॉप किया जाए।
ताज कोयल

4
@TajKoyal: वास्तव में जो निन्जाकॉको आपको दिखा रहा है कि आप कैसे ऊपर और नीचे से फसल लेते हैं। वह नई छवि के लिए एक आयत निर्दिष्ट कर रहा है। आप देख सकते हैं कि वह टॉप और बॉटम पॉइंट्स पर y- वैल्यू से 30 पिक्सल्स को शेव करता है। यदि आप किसी भी तरह से x मानों को ऑफसेट करते हैं, तो यह बाईं और दाईं ओर को प्रभावित करेगा।
जेडी

1
मेरी मदद करने के लिए धन्यवाद दोस्तों।
ताज कोयल

7
मेरे लिए आलसी के रूप में किसी के लिएParameters: box – The crop rectangle, as a (left, upper, right, lower)-tuple.
ऋषव

53

इसके लिए आपको PIL (तकिया) आयात करना होगा। मान लीजिए कि आपके पास आकार 1200, 1600 की एक छवि है। हम 400, 400 से 800, 800 से छवि की फसल करेंगे

from PIL import Image
img = Image.open("ImageName.jpg")
area = (400, 400, 800, 800)
cropped_img = img.crop(area)
cropped_img.show()

20

(बाएं, ऊपरी, दाएं, निचले) का अर्थ है दो बिंदु,

  1. (बाएं, ऊपरी)
  2. (सही, कम)

800x600 पिक्सेल छवि के साथ, छवि का ऊपरी ऊपरी बिंदु (0, 0) है, दाईं ओर निचला बिंदु (800, 600) है।

तो, छवि को आधा काटने के लिए:

from PIL import Image
img = Image.open("ImageName.jpg")

img_left_area = (0, 0, 400, 600)
img_right_area = (400, 0, 800, 600)

img_left = img.crop(img_left_area)
img_right = img.crop(img_right_area)

img_left.show()
img_right.show()

यहाँ छवि विवरण दर्ज करें

समन्वय प्रणाली

पायथन इमेजिंग लाइब्रेरी कार्टिसियन पिक्सेल समन्वय प्रणाली का उपयोग करती है, ऊपरी बाएँ कोने में (0,0) के साथ। ध्यान दें कि निर्देशांक निहित पिक्सेल कोनों को संदर्भित करता है; (0, 0) के रूप में संबोधित पिक्सेल का केंद्र वास्तव में (0.5, 0.5) पर है।

निर्देशांक आमतौर पर पुस्तकालय में 2-ट्यूपल्स (x, y) के रूप में पारित किए जाते हैं। रेक्टैंगल्स को 4-ट्यूपल्स के रूप में दर्शाया जाता है, पहले ऊपरी बाएं कोने के साथ। उदाहरण के लिए, सभी 800x600 पिक्सेल छवि को कवर करने वाला एक आयत (0, 0, 800, 600) लिखा जाता है।


13

ऐसा करने का एक आसान तरीका ImageOps से फसल का उपयोग करना है । आप प्रत्येक पक्ष से जितने भी पिक्सल्स क्रॉप करना चाहते हैं, कर सकते हैं।

from PIL import ImageOps

border = (0, 30, 0, 30) # left, up, right, bottom
ImageOps.crop(img, border)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.