উত্তর:
import Image
background = Image.open("test1.png")
foreground = Image.open("test2.png")
background.paste(foreground, (0, 0), foreground)
background.show()
প্রথম প্যারামিটার থেকে .paste()চিত্রটি আটকানো হয়। দ্বিতীয়টি স্থানাঙ্কগুলি এবং গোপন সসটি তৃতীয় প্যারামিটার। এটি এমন একটি মুখোশ নির্দেশ করে যা চিত্রটি আটকানোর জন্য ব্যবহৃত হবে। আপনি যদি স্বচ্ছতার সাথে কোনও চিত্র পাস করেন তবে আলফা চ্যানেলটি মাস্ক হিসাবে ব্যবহৃত হবে।
দস্তাবেজগুলি পরীক্ষা করুন ।
foreground.convert('RGBA')মাস্ক প্যারামিটারের জন্য ব্যবহার করুন ।
ValueError: bad transparency mask
ValueError: bad transparency maskব্যবহার ঠিক করতেbg.paste(fg, (0, 0), fg.convert('RGBA'))
Image.pasteযখন ব্যাকগ্রাউন্ড চিত্রটিতে স্বচ্ছতা থাকে তখন প্রত্যাশার মতো কাজ করে না। আপনাকে আসল আলফা কম্পোজিটিং ব্যবহার করতে হবে ।
বালিশ 2.0 এর মধ্যে একটি alpha_compositeফাংশন রয়েছে যা এটি করে।
background = Image.open("test1.png")
foreground = Image.open("test2.png")
Image.alpha_composite(background, foreground).save("test3.png")
সম্পাদনা: উভয় চিত্রই আরজিবিএ টাইপের হওয়া দরকার। সুতরাং convert('RGBA')সেগুলি প্যালেট করা থাকলে আপনাকে কল করতে হবে ইত্যাদি ..
ValueError: image has wrong made
ইতিমধ্যে অল্ট যেমন উল্লেখ করেছে, Image.pasteসঠিকভাবে কাজ করে না, যখন উত্স এবং গন্তব্য উভয়টিতেই আলফা থাকে।
নিম্নলিখিত পরিস্থিতিতে বিবেচনা করুন:
দুটি পরীক্ষার চিত্র, উভয়ই আলফা ধারণ করে:
layer1 = Image.open("layer1.png")
layer2 = Image.open("layer2.png")
ছবিটির Image.pasteমতো ব্যবহার করে রচনা :
final1 = Image.new("RGBA", layer1.size)
final1.paste(layer1, (0,0), layer1)
final1.paste(layer2, (0,0), layer2)
নিম্নলিখিত চিত্রটি উত্পন্ন করে (ওভারলেড লাল পিক্সেলের আলফা অংশটি সম্পূর্ণভাবে দ্বিতীয় স্তর থেকে নেওয়া হয়েছে The পিক্সেলগুলি সঠিকভাবে মিশ্রিত হয়নি):
ছবিটির Image.alpha_compositeমতো ব্যবহার করে রচনা :
final2 = Image.new("RGBA", layer1.size)
final2 = Image.alpha_composite(final2, layer1)
final2 = Image.alpha_composite(final2, layer2)
নিম্নলিখিত (সঠিক) চিত্র উত্পাদন করে:
alpha_compositeঅফসেট সেট করতে পারবেন না, পুরোপুরি pasteফাংশনটি প্রতিস্থাপনের জন্য কোনও উদাহরণ দিতে আপনি আপত্তি করবেন ?
কেউ মিশ্রণটিও ব্যবহার করতে পারেন:
im1 = Image.open("im1.png")
im2 = Image.open("im2.png")
blended = Image.blend(im1, im2, alpha=0.5)
blended.save("blended.png")
def trans_paste(bg_img,fg_img,box=(0,0)):
fg_img_trans = Image.new("RGBA",bg_img.size)
fg_img_trans.paste(fg_img,box,mask=fg_img)
new_img = Image.alpha_composite(bg_img,fg_img_trans)
return new_img
একটি অনুরূপ প্রশ্ন ছিল এবং উত্তর খুঁজে পেতে সমস্যা ছিল। নিম্নলিখিত ফাংশন আপনাকে একটি নির্দিষ্ট অফসেটে অন্য চিত্রের উপর স্বচ্ছতা পরামিতি সহ একটি চিত্র পেস্ট করতে দেয়।
import Image
def trans_paste(fg_img,bg_img,alpha=1.0,box=(0,0)):
fg_img_trans = Image.new("RGBA",fg_img.size)
fg_img_trans = Image.blend(fg_img_trans,fg_img,alpha)
bg_img.paste(fg_img_trans,box,fg_img_trans)
return bg_img
bg_img = Image.open("bg.png")
fg_img = Image.open("fg.png")
p = trans_paste(fg_img,bg_img,.7,(250,100))
p.show()
ValueError: images do not match
আমি @ পি.মেলচ ব্যবহারকারী এবং মন্তব্য করা মিথ্রিলের দ্বারা আমি যে প্রকল্পে কাজ করছি তার মন্তব্যের পরামর্শটি কোডিং শেষ করেছি ।
আমি সীমানা সুরক্ষার বাইরেও কোড করেছিলাম, এর জন্য এখানে কোড । (আমি একটি নির্দিষ্ট প্রতিশ্রুতি যুক্ত করেছি কারণ জিনিসগুলি এই ভাণ্ডারের ভবিষ্যতে পরিবর্তন হতে পারে)
নোট: থেকে চিত্রগুলি তাই পছন্দ করি আমি numpy অ্যারে আশা np.array(Image.open(...))ইনপুট A এবং B থেকে copy_fromএবং এই লিঙ্ক ফাংশন overlayআর্গুমেন্ট।
নির্ভরতাগুলি copy_fromহ'ল তার ঠিক আগে ফাংশন, পদ্ধতিটি এবং কাঁচের জন্য পিআইএল চিত্রের সামগ্রী হিসাবে নাম্বার অ্যারে।
ফাইলটি খুব শ্রেণীবদ্ধ হলেও, আপনি যদি এই ফাংশনটি ব্যবহার করতে চান তবে overlay_transparentনামটির বিষয়ে নিশ্চিত হনself.frame শ্রেণিবদ্ধ আপনার পটভূমির চিত্রটি নামী অ্যারেটির ।
অথবা আপনি কেবল পুরো ফাইলটি অনুলিপি করতে পারেন (সম্ভবত কিছু আমদানি এবং Utilsশ্রেণি মুছে ফেলুন ) এবং এই ফ্রেম শ্রেণীর সাথে ইন্টারে্যাক্ট করতে পারেন:
# Assuming you named the file frame.py in the same directory
from frame import Frame
background = Frame()
overlay = Frame()
background.load_from_path("your path here")
overlay.load_from_path("your path here")
background.overlay_transparent(overlay.frame, x=300, y=200)
তারপরে আপনার background.frameওভারলেড এবং আলফা সংমিশ্রিত অ্যারে হিসাবে রয়েছে, আপনি এটি থেকে একটি পিআইএল চিত্র পেতে পারেন overlayed = Image.fromarray(background.frame)বা এর মতো কিছু:
overlayed = Frame()
overlayed.load_from_array(background.frame)
বা ঠিক background.save("save path")যেমন আলফা সংমিশ্রিত অভ্যন্তরীণ self.frameভেরিয়েবল থেকে গ্রহণ করে ।
আপনার কাছে সেই ফাইলে পড়তে এবং এই বাস্তবায়ন আমি পদ্ধতি কোডেড সঙ্গে কিছু অন্যান্য চমৎকার ফাংশন জানতে পারেন get_rgb_frame_array, resize_by_ratio, resize_to_resolution, rotate, gaussian_blur, transparency, vignetting:)
আপনি সম্ভবত resolve_pendingসেই প্রকল্পটি সরাতে চাইবেন যেটি সেই প্রকল্পের জন্য নির্দিষ্ট।
খুশী যদি আমি আপনাকে সহায়তা করি, আমি যে প্রকল্পের কথা বলছি তার রেপো অবশ্যই পরীক্ষা করে দেখুন , এই প্রশ্ন এবং থ্রেড আমাকে উন্নয়নের ক্ষেত্রে অনেক সহায়তা করেছে :)
;