সমাধান
color=$( convert filename.png -format "%[pixel:p{0,0}]" info:- )
convert filename.png -alpha off -bordercolor $color -border 1 \
\( +clone -fuzz 30% -fill none -floodfill +0+0 $color \
-alpha extract -geometry 200% -blur 0x0.5 \
-morphology erode square:1 -geometry 50% \) \
-compose CopyOpacity -composite -shave 1 outputfilename.png
ব্যাখ্যা
এই বরং একটু সহজ উত্তর পূর্বে প্রদত্ত চেয়ে দীর্ঘতর হয়, কিন্তু এটি দেয় অনেক ভাল ফলাফল: (1) মানের antialiased আলফা উচ্চতর কারণে, এবং (2) শুধুমাত্র পটভূমি হিসেবে একটি একক রঙ উল্টোদিকে মুছে ফেলা হবে। ("ব্যাকগ্রাউন্ড" চিত্রের প্রান্তগুলি থেকে একটি বন্যাকর্ষণ ব্যবহার করে উপরের বাম পিক্সেলের হিসাবে প্রায় একই রঙ হিসাবে সংজ্ঞায়িত করা হয়েছে))
অতিরিক্তভাবে, আলফা চ্যানেলটি হলস এড়ানোর জন্য অর্ধ পিক্সেল দ্বারাও ক্ষয় হয়। অবশ্যই, ইমেজম্যাগিকের মরফোলজিকাল ক্রিয়াকলাপগুলি (এখনও?) উপ-পিক্সেল স্তরে কাজ করে না, যাতে আপনি দেখতে পাবেন যে আমি ক্ষয় হওয়ার আগে আলফা চ্যানেলটি 200% এ উড়িয়ে দিচ্ছি।
ফলাফলের তুলনা
ইমেজম্যাগিক লোগোটি চালানোর সময় আমার সমাধান বনাম সরল পদ্ধতির ("-ফজ 2% -স্বচ্ছ সাদা") এর তুলনা এখানে দেওয়া হয়েছে
। পার্থক্যগুলি দৃশ্যমান করার জন্য আমি দুটি স্বচ্ছ চিত্রকে একটি স্যাডল ব্রাউন পটভূমিতে ফ্ল্যাট করেছি als
সহজ পদ্ধতির মধ্যে উইজার্ডের দাড়ি কীভাবে অদৃশ্য হয়ে গেছে তা লক্ষ্য করুন। উইজার্ডের প্রান্তগুলি তুলনা করে দেখুন যে অ্যান্টি-এলিয়াসেড আলফা চিত্রটি সহজেই পটভূমিতে মিশ্রিত করতে সহায়তা করে।
অবশ্যই, আমি সম্পূর্ণরূপে স্বীকার করেছি এমন সময় আছে যখন আপনি সহজ সমাধানটি ব্যবহার করতে চাইতে পারেন। (উদাহরণস্বরূপ: এটি মনে রাখা অনেক সহজ এবং আপনি যদি জিআইএফ-তে রূপান্তর করেন তবে আপনি যে কোনও উপায়ে 1-বিট আলফাতেই সীমাবদ্ধ রয়েছেন))
mktrans শেল স্ক্রিপ্ট
যেহেতু আপনি বারবার এই কমান্ডটি টাইপ করতে চান এটি অসম্ভব, তাই আমি এটি কোনও স্ক্রিপ্টে মুড়িয়ে দেওয়ার পরামর্শ দিই। আপনি গিথুব থেকে একটি বেস শেল স্ক্রিপ্ট ডাউনলোড করতে পারেন যা আমার প্রস্তাবিত সমাধানটি সম্পাদন করে। এটি একটি ডিরেক্টরিতে একাধিক ফাইলে চালানো যেতে পারে এবং আপনি জিনিসগুলি টুইট করতে চান এমন ক্ষেত্রে দরকারী মন্তব্য অন্তর্ভুক্ত করে।
বিজি_মোভাল স্ক্রিপ্ট
যাইহোক, ইমেজম্যাগিক আসলে "বিজি_রেমোভাল" নামে একটি স্ক্রিপ্ট নিয়ে আসে
যা আমার সমাধান হিসাবে একইভাবে প্লাবনফিল ব্যবহার করে। তবে ফলাফলগুলি দুর্দান্ত নয় কারণ এটি এখনও 1-বিট আলফা ব্যবহার করে। এছাড়াও, বিজি_মোমোভাল স্ক্রিপ্টটি ধীর গতিতে চলে এবং এটি ব্যবহার করার জন্য কিছুটা কৌশলযুক্ত (এটির জন্য আপনাকে দুটি পৃথক ফাজ মান উল্লেখ করতে হবে)। বিজি_মোমোভাল থেকে আউটপুটটির উদাহরণ এখানে।
convert original.png -transparent white new.png
কিন্তু চেষ্টা করার পরেও এটি কাজ করতে পারে না। একদিকে যেমন, আপনি কি নিশ্চিত যে আপনার পটভূমিটি আসলেই সাদা (# এফএফএফএফএফএফ), বা এটি কি প্রায় সাদা (উদাহরণস্বরূপ #FEFEFE)?