2015-09-02 8 views
5

मैं के लिए iOS और Android के पुस्तकालय रहा हूँ करने के लिए इसी तरह की छवियों के किनारों पंख के लिए पुस्तकालय (अधिमानतः) या एल्गोरिथ्म है कि मुझे मदद मिलेगी समान तरीके से छवि कैसे उस में नियंत्रित किया जाता है के किनारों पंख करने के लिए फोटोशॉप। नीचे दिया गया चित्रण एल्गोरिदम के वांछित प्रभाव को दिखाता है। मुझे छवि के पंखों की सीमाओं में दिलचस्पी नहीं है, केवल अल्फा किनारों। मैं एल्गोरिदम खोज रहा हूं जो बिना किसी भाग्य के कुछ दिनों तक इसे पूरा कर सकता है। किसी भी तरह की सहायता को आभार समझेंगे।iOS और Android के एल्गोरिथ्म या फ़ोटोशॉप के

Feathering Image

+2

http://stackoverflow.com/a/31142908/2194046 मेरी कोड की जाँच, यह किसी भी आकार का UIImage पंख होगा। :)) – zurakach

उत्तर

6

मान लिया जाये कि आप अल्फा चैनल है (जैसे पारदर्शी पृष्ठभूमि के साथ तस्वीर पर) ऐसा लगता है कि नियमित रूप से convultion कलंक मैट्रिक्स आप पूरा करना चाहिए।

हालांकि बजाय आरजीबी चैनलों के माध्यम से जा रहा है - आप अल्फा चैनल केवल के माध्यम से जाना चाहिए।

चेक कलंक फिल्टर यहाँ: https://en.wikipedia.org/wiki/Kernel_%28image_processing%29

आप बॉक्स कलंक/गाऊसी कलंक में रुचि रखते हैं। हालांकि इस प्रभाव को और अधिक चिकनी बनाने के लिए - आपको बड़े आकार के मैट्रिक्स का उपयोग करना चाहिए।

कारण यह है कि एल्गोरिदम आपकी आवश्यकताओं को पूरा करेगा, अगर सभी आसपास के पिक्सल में अल्फा 0 है - यह अभी भी 0 होगा। यदि 255 - यह 255 रहेगा। अल्फा 0/255 के बीच सीमा के क्षेत्र में बस पिक्सल प्रभावित होंगे ।

संपादित करें:

क्रोम के साथ इस बेला की जांच करें (एफएफ कि वास्तव में धीमी है में): http://jsfiddle.net/5L40ms65/

आप कोड के अंत में एल्गोरिथ्म में एक बार देख ले सकते हैं। कार्यान्वयन के बाद से मैं ने कहा कि: - धुंधला करने के लिए करता है, तो सभी neigbour पिक्सल 255 या 0 (अल्फ़ा चैनल) कर रहे हैं की कोई जरूरत नहीं - यह अन्य मामले

में भी आरजीबी धुंधला करने के लिए सामान्य तौर पर की जरूरत है:

RADIUS = 2 (makes total width of matrix = 5) 
For x = 0..width 
    for y = 0..width 
    if all pixels in square of radius 2 are alpha = 0 
     do nothing 
    elsif all pixels in square have alpha = 255 
     do nothing 
    else 
     pixel[x][y].RGB = average RGB of adjacent pixels where alpha != 0 
     pixel[x][y].ALPHA = average ALPHA in square 

उदाहरण त्रिज्या के साथ परिणाम = 2

बेशक

इस बल्कि अवधारणा कार्यक्रम है, वहाँ Memoization के लिए जगह का एक बहुत है और इस स्क्रिप्ट में बदलाव लेकिन यह एक बड़ी तस्वीर स्पष्ट करना चाहिए

enter image description here

+0

यदि आप अपने उत्तर पर अधिक विस्तृत करते हैं तो मुझे आपको बक्षीस देने में खुशी होगी और शायद मुझे यह कैसे करना चाहिए इसका संक्षिप्त उदाहरण प्रदान करें। –

0

आप दृश्य की पृष्ठभूमि का रंग के आधार पर अपनी सीमा के अल्फा बदल सकता है।

var r:Float! 
var g:Float! 
var b:Float! 
var a:Float! 

if self.view.backgroundColor.getRed(red:r, green:g, blue:b, alpha:a) { 
    var imgv = UIImageView(frame: CGRect(x:100, y:100, width:100, height:100)) 
    imgv.image = UIImage(named:"name") 
    imgv.layer.borderWidth = 2.0 
    imgv.layer.borderColor = UIColor(red:r, green:g, blue:b, alpha:0.5).CGColor 
    imgv.layer.cornerRadius = imgv.frame.size.width/2 
    imgv.clipsToBounds = true 
}else{ 
    //Could not get the RGB of background color 
} 

आप इस कोड में त्रुटियां देख सकते हैं क्योंकि मैंने अभी तक इसका परीक्षण नहीं किया है।

+0

यह छवि के किनारों के लिए सीमा लागू नहीं होगी, बस छवि को देखने के फ्रेम करने के लिए। –

+0

क्या आप छवि को स्वयं प्रदर्शित करने वाले कंटेनर को नहीं बदलना चाहते हैं? –

+0

"मैं छवि के नहीं रुचि फ़ेदरिंग सीमा, बस अल्फा किनारों हूँ।" –

संबंधित मुद्दे