ইমেজম্যাগিক এবং কমান্ডলাইন প্রম্পট ব্যবহার করে স্বচ্ছ পটভূমি সেট করুন


120

মনে করুন আপনার কোনও চিত্র (পিএনজি বা জেপিজি) রয়েছে। এই চিত্রটির একটি সাদা ব্যাকগ্রাউন্ড রয়েছে এবং আমার এই পটভূমিটি স্বচ্ছ করতে হবে।

আমি এই উদাহরণগুলি দিয়ে চেষ্টা করেছি:

  • convert original.png -background none transparent.png
  • convert original.png -background white -flatten -alpha off transparent.png

তবে কোনও পছন্দসই ফলাফল নেই।

আমি কীভাবে এটি তৈরি করতে পারি?

গুরুত্বপূর্ণ: convertকমান্ড-লাইন ব্যবহার করে ।


বিজোড় - আমি ভেবেছিলাম সম্পর্কিত কমান্ডটি convert original.png -transparent white new.pngকিন্তু চেষ্টা করার পরেও এটি কাজ করতে পারে না। একদিকে যেমন, আপনি কি নিশ্চিত যে আপনার পটভূমিটি আসলেই সাদা (# এফএফএফএফএফএফ), বা এটি কি প্রায় সাদা (উদাহরণস্বরূপ #FEFEFE)?
mathematical.coffee

@ গাণিতিক.কফি ঠিক আছে আমি বুঝতে পারি, এটি কি না তা পরীক্ষা করে দেখি এবং আমি এই থ্রেডটি চালিয়ে যাব। ধন্যবাদ.
ইস্রায়েল

@ গাণিতিক কফি আবার হাই, আমি রঙগুলি পরীক্ষা করেছি এবং এই চিত্রটির #FFFFFF এর মতো ব্যাকগ্রাউন্ড রয়েছে, অন্য কথায় "সাদা"। :( এই ঘটনাটি নয়!
ইস্রায়েল

উত্তর:


140

আমি উবুন্টু 12.04 এ ইমেজম্যাগিক 6.6.9-7 ব্যবহার করছি।
আমার জন্য যা কাজ করেছে তা হ'ল:

convert test.png -transparent white transparent.png

এটি পরীক্ষায় সমস্ত সাদাকে পরিবর্তন করেছে


6
জেপিজি স্বচ্ছ করবে না যতক্ষণ না বুঝতে পেরে এটি আমার পক্ষে কাজ করে না। একবার আমি পিএনজিতে স্যুইচ করেছিলাম এটি ঠিক যা চেয়েছিল তা করেছিল - সবেমাত্র "সাদা" পরিবর্তন করে "আরজিবি ($ আর, $ জি, $ বি)" করতে হবে।
রজার ডিউক

2
ঈশ্বরের অভিশাপ! এটা অসাধারণ!
agilob

2
এটি কেবল ব্যাকগ্রাউন্ডকে স্বচ্ছ রূপে রূপান্তরিত করবে না, তবে প্রতিটি সাদা পিক্সেল। পটভূমিটি কেবল স্বচ্ছ রূপান্তর করার কোনও উপায় আছে কি?
আলেজান্দ্রো লোজডজিজেস্কি

2
@ আলেজান্দ্রো লোডজিয়েজস্কি - আপনি কীভাবে "ব্যাকগ্রাউন্ড" নির্ধারণ করছেন?
জুলাই

1
@ আলেজান্দ্রো লজডজিজেস্কি: ভাল প্রশ্ন। শীর্ষে-বাম পিক্সেলের প্রায় একইরকম রঙগুলি সন্ধান করে দয়া করে আমার সমাধানটি দেখুন যা প্রান্তগুলি থেকে একটি প্লাবনফিল ব্যবহার করে।
হ্যাকারব 9

79

আমারও একই সমস্যা ছিল। যাতে আমি jpg / png চিত্র বিন্যাস থেকে ইমেজম্যাগিক ব্যবহার করে সাদা পটভূমি সরাতে হবে remove

আমার জন্য যা কাজ করেছিল তা হ'ল:

1) চিত্র ফর্ম্যাটটিকে পিএনজিতে রূপান্তর করুন: convert input.jpg input.png

2) convert input.png -fuzz 2% -transparent white output.png


6
স্বচ্ছ পটভূমি এবং অস্বচ্ছ অগ্রভাগের মধ্যে একটি মসৃণ প্রান্ত থাকা ভাল, এটি ভাল। আপনি যদি জেপিজিতে গোলমাল আইকনগুলিকে পিএনজিতে রূপান্তর করেন এবং স্বচ্ছতা যুক্ত করতে চান তবে আপনি কিছু মাঝারি ফিল্টারিংও যুক্ত করতে পারেন:mogrify -format png -median 2 -fuzz 5% -transparent white ico_*.jpg
টমাসজ গ্যান্ডার

44

সমাধান

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-বিট আলফা ব্যবহার করে। এছাড়াও, বিজি_মোমোভাল স্ক্রিপ্টটি ধীর গতিতে চলে এবং এটি ব্যবহার করার জন্য কিছুটা কৌশলযুক্ত (এটির জন্য আপনাকে দুটি পৃথক ফাজ মান উল্লেখ করতে হবে)। বিজি_মোমোভাল থেকে আউটপুটটির উদাহরণ এখানে।

দ্য বিজি_রেমোভাল লিপি: দাড়ি থাকলেও অ্যান্টিয়ালিজিংয়ের অভাব রয়েছে


2
আমার ফাজটিকে 2% এ পরিবর্তন করতে হবে কারণ ছবিটিতে সাদা ব্যাকগ্রাউন্ড সহ একটি সাদা মেশিন রয়েছে। এবং যদিও এটি 100% নিখুঁত নয়, তবে এটি আমার পক্ষে সেরা সমাধান যা আমি ম্যানুয়ালি gimpবা যাই হোক না কেন এটি করতে চাই না। :)
টুকুসেজসিরস

1
অসাধারণ সমাধান!
0x01 ঘন্টা

29

এটি আমার পক্ষে কাজ করে:

convert original.png -fuzz 10% -transparent white transparent.png

যেখানে ফ্যজ% ছোট, সত্য সাদা বা তত বিপরীতভাবে, তত বেশি%, সাদা থেকে আরও বেশি প্রকরণ স্বচ্ছ হওয়ার সুযোগ রয়েছে


1
কি দারুন! এটাই আমার দরকার ছিল! আগে: i.imgur.com/2Rd7w1N.png , পরে: i.imgur.com/4RTYygo.png
ডোরিয়ান

এটি পুরোপুরি কাজ করছে না কারণ এটি সাদা রঙ এবং সাদা ব্যাকগ্রাউন্ড সহ চিত্রগুলি পরিচালনা করতে অক্ষম। ট্রাম্পের ফটোগুলির মতো।
সিনিয়র পিএইচপি প্রোগ্রামার টিম

হোয়াইট অন হোয়াইটের জন্য, আমি উপরে পোস্ট করা বন্যা ভরাট সমাধানটি ব্যবহার করে দেখুন । অথবা আমার mktransশেল স্ক্রিপ্টটি ব্যবহার করুন : github.com/hackerb9/mktrans
hackerb9

12

পটভূমিটি স্বচ্ছ করতে আপনি এটি ব্যবহার করতে পারেন

convert test.png -background rgba(0,0,0,0) test1.png

উপরেরটি প্রিফ্যাক্ট স্বচ্ছ পটভূমি দেয়


4
শেলটির জন্য কিছু উদ্ধৃতি প্রয়োজন হতে পারে (): convert more-icon.png -gravity center -background 'rgba(0,0,0,0)' -extent 27x27 new-more-icon.png
জিম কে।

7

ইমেজম্যাগিক ব্যবহার করে এটি হ্যাকারব 9 কোড এবং ফলাফলের সাথে খুব মিল, তবে এটি একটি সামান্য সরল কমান্ড লাইন। এটি ধরে নিচ্ছে যে শীর্ষ বাম পিক্সেলটি পটভূমির রঙ। আমি কেবল স্বচ্ছতার সাথে ব্যাকগ্রাউন্ডটি পূরণ করেছি, তারপরে আলফা চ্যানেলটি নির্বাচন করুন এবং এটি অস্পষ্ট করে দিন এবং আঞ্চলিক অঞ্চলটির অর্ধেক অংশকে 50x100% ব্যবহার করে সরান। তারপরে সমস্ত চ্যানেলটি ফিরে করুন এবং এটি বাদামী রঙের তুলনায় সমতল করুন। -Blur 0x1 -level 50x100% আলফা চ্যানেলের স্বচ্ছতার সীমানা অ্যান্টিয়ালিয়ায় কাজ করে। অ্যান্টিআলাইজিংয়ের ডিগ্রি পরিবর্তনের জন্য আপনি ফাজ মান, অস্পষ্ট পরিমাণ এবং সর্বোপরি 50% মান সামঞ্জস্য করতে পারেন।

convert logo: -fuzz 25% -fill none -draw "matte 0,0 floodfill" -channel alpha -blur 0x1 -level 50x100% +channel -background saddlebrown -flatten result.jpg

এখানে চিত্র বর্ণনা লিখুন


খুশী হলাম। আমি পছন্দ করি যে আপনি এটি সংক্ষিপ্ত লাইনে পেয়ে গেছেন। আমি স্ক্রিপ্টটি লেখার সময় এটি আমার মধ্যবর্তী এক ধাপের অনুরূপ। আমি এর বিরুদ্ধে সিদ্ধান্ত নিয়েছি কারণ (ক) এটি অনেকগুলি তীক্ষ্ণ বিবরণ হারিয়ে ফেলেছে, (খ) আমি রঙের নির্বাচনটি স্পষ্ট করে তুলতে চেয়েছিলাম যাতে এটি সহজেই পরিবর্তন করা যায়, এবং (গ) আমি কেবল শীর্ষে নয়, সমস্ত প্রান্ত থেকে বন্যার ভরাট করতে চেয়েছিলাম -বাম কোণে. (অন্য মুহুর্তে আমি এখনই ভুলে যাচ্ছি)।
হ্যাকারব 9

2
পিএস আমি একটি বন্য অনুমান নিতে যাচ্ছি যে "এফএমডাব্লু" এর অর্থ ফ্রেড এম ওয়েইনহাউস। যদি তাই হয়, শুভেচ্ছা, ডঃ ওয়াইনহাউস! তিনি যে তিনি জানেন না এমন কারও কাছে, তিনি 1970 এর দশকে কম্পিউটার গ্রাফিকগুলিতে কিছু প্রাথমিক গবেষণা লিখেছিলেন। প্রত্যেকের fmwconcepts.com/imagemagick এ ইমেজম্যাগিক শেল স্ক্রিপ্টগুলির তার আশ্চর্যজনক কনকোপিয়াটি পরীক্ষা করা উচিত ।
hackerb9

1
@ হ্যাকারব 9: হ্যাঁ, তিনিই আমি। আমরা কি একে অপরকে চিনি? আপনি চাইলে আমাকে একটি ইমেল প্রেরণ করুন। আমার ইমেল ঠিকানাটি আপনার লিঙ্ক করা আমার ওয়েব পৃষ্ঠায় রয়েছে।
fmw42

4

আপনি যদি স্বচ্ছতার স্তরটি নিয়ন্ত্রণ করতে চান তবে আপনি আরজিবিএ ব্যবহার করতে পারেন। যেখানে একটি আলফা হয়। স্বচ্ছ জন্য 0 এবং অস্বচ্ছ জন্য 1। স্বচ্ছতার জন্য চূড়ান্ত আউটপুট ফাইলের অবশ্যই .png এক্সটেনশন থাকতে হবে তা নিশ্চিত করুন।

convert 
  test.png 
    -channel rgba 
    -matte 
    -fuzz 40% 
    -fill "rgba(255,255,255,0.5)" 
    -opaque "rgb(255,255,255)" 
       semi_transparent.png

1

হাঁ। এই একই সমস্যা ছিল। আমি যে কমান্ডটি চালিয়েছি তা এখানে রয়েছে এবং এটি পুরোপুরি কাজ করেছে: convert transparent-img1.png transparent-img2.png transparent-img3.png -channel Alpha favicon.ico

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.