পিআইএল ব্যবহার করে কীভাবে একটি চিত্র ক্রপ করবেন?


133

প্রদত্ত চিত্রটি থেকে প্রথম 30 টি সারি এবং শেষ 30 টি সারি সরিয়ে আমি চিত্রটি ক্রপ করতে চাই। আমি অনুসন্ধান করেছি কিন্তু সঠিক সমাধান পাইনি। কারও কি কিছু পরামর্শ আছে?

উত্তর:


195

একটি crop()পদ্ধতি আছে:

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

1
হ্যাঁ, আমি জানি যে ইম ক্রপ (বাক্স) চিত্রটি ক্রপ করার জন্য ব্যবহৃত হয়। তবে আমি কেবল বাম এবং ডান নয় চিত্রের উপরের এবং নীচের অংশটি ক্রপ করতে চাই, যদিও বাক্স () 4 টি দ্বিগুণ লাগবে তবে আমি কীভাবে চিত্রের উপরের এবং নীচের অংশটি কাটব।
তাজ কোয়েল

4
@ তাজকৌল: নিঞ্জেজেকো আপনাকে ঠিক কী দেখিয়েছে তা হল আপনি কীভাবে উপরের এবং নীচে কাটাচ্ছেন। তিনি নতুন চিত্রটির জন্য একটি আয়তক্ষেত্র উল্লেখ করছেন। আপনি দেখতে পাচ্ছেন যে তিনি শীর্ষ এবং নীচের পয়েন্টগুলিতে y- মান থেকে 30 পিক্সেল ছাঁটাই করেছেন। আপনি যদি কোনওভাবে x মানগুলি অফসেট করেন তবে এটি বাম এবং ডানদিকে প্রভাব ফেলবে।
jdi

1
আমাকে সাহায্য করার জন্য ধন্যবাদ ছেলেরা।
তাজ কোয়েল

7
আমার মতো অলস কারও জন্যParameters: box – The crop rectangle, as a (left, upper, right, lower)-tuple.
isষভ

52

এর জন্য আপনাকে পিআইএল (বালিশ) আমদানি করতে হবে। মনে করুন আপনার আকার 1200, 1600 রয়েছে We আমরা 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) at

স্থানাঙ্কগুলি সাধারণত লাইব্রেরিতে 2-টিপলস (x, y) হিসাবে পাস করা হয়। আয়তক্ষেত্রগুলি 4 টি-টিপল হিসাবে উপস্থাপিত হয়, উপরের বাম কোণটি প্রথমে দেওয়া হয়। উদাহরণস্বরূপ, 800x600 পিক্সেল চিত্রের সমস্তটি জুড়ে একটি আয়তক্ষেত্রটি (0, 0, 800, 600) হিসাবে লিখিত হয়েছে is


13

এটি করার একটি সহজ উপায় হ'ল ইমেজআপস থেকে ক্রপ ব্যবহার করা । আপনি প্রতিটি দিক থেকে ক্রপ করতে চান এমন পিক্সেল সংখ্যাকে খাওয়াতে পারেন।

from PIL import ImageOps

border = (0, 30, 0, 30) # left, up, right, bottom
ImageOps.crop(img, border)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.