2015-09-30 3 views
5

हम उन्हें एक में विलय करने से पहले छवियों की एक श्रृंखला पर एक ओवरले लागू करने की कोशिश कर रहे हैं। अभी ऐसा लगता है कि Imagemagick छवि को ओवरले लागू करने के बजाय लागू रंग में परिवर्तित कर रहा है। डॉक्स इस बात के बारे में बहुत स्पष्ट नहीं हैं कि हमें अलग-अलग क्या करना चाहिए। यदि आप इस पर कोई अंतर्दृष्टि रखते हैं तो मैं सराहना करता हूं। कोड इस प्रकार है:रेल में छविमैजिक का उपयोग करके अस्पष्टता के साथ रंग ओवरले

def self.concatenate_images (source, image) 
    height = FastImage.size(image.url)[0] 
    width = FastImage.size(image.url)[1] 

    source = source.first 
    source = source.resize_to_fill(height, width).quantize(256, Magick::GRAYColorspace).contrast(true) 

    User.color_variant.each_slice(3).with_index do |slice,variant_index| 

    slice.each_with_index do |color,color_index|     
    colored = Magick::Image.new(height, width) { self.background_color = color.keys[0]} 
    colored.composite!(source.negate, 0, 0, Magick::CopyOpacityCompositeOp) 

    colored.write("#{User.get_img_path}#{color.values[0]}.png") 

    if variant_index == 2 && color_index == 0 
     system "convert #{User.get_img_path}#{slice[0].values[0]}.png #{image.url} +append #{User.get_img_path}#{slice[0].values[0]}.png" 
    end 

    if color_index!=0 && variant_index != 3 
     system "convert #{User.get_img_path}#{slice[0].values[0]}.png #{User.get_img_path}#{slice[color_index].values[0]}.png +append #{User.get_img_path}#{slice[0].values[0]}.png" 
    end 
    end 
end 

उत्तर

0

मैं आतंक विरोधी में नहीं हूँ, लेकिन मेरा मानना ​​है कि आप के बजाय अपनी छवि डालने की, ठोस रंग के साथ अपनी छवि को बदल रहे हैं, क्योंकि Copy_Opacity समग्र विधि अल्फ़ा चैनल (Copy_Opacity method) बदल देता है।

बजाय

:

colored = Magick::Image.new(height, width) { self.background_color = color.keys[0]} 
colored.composite!(source.negate, 0, 0, Magick::CopyOpacityCompositeOp) 

इस प्रयास करें:

colored = Magick::Image.new(height, width) { self.background_color = color.keys[0]} 
your_overlayed_image.composite!(colored, 0, 0, Magick::ColorizeCompositeOp) 

देखें Alpha Compositing (RMagick) - The colorize composite operation

+1

कि साथी काम नहीं किया लेकिन धन्यवाद मैं इसे करने की कोशिश की। यह सिर्फ imagemagick है कि इस तरह के बुलबुले दस्तावेज ... soooo बहुत लेखन ... –

3

मैं रूबी बात नहीं है, लेकिन मुझे लगता है तुम गलत सम्मिश्रण विधा है।

identify -list compose 

आउटपुट

Atop 
Blend 
Blur 
Bumpmap 
ChangeMask 
Clear 
ColorBurn 
ColorDodge 
Colorize 
CopyBlack 
CopyBlue 
CopyCyan 
CopyGreen 
Copy 
CopyMagenta 
CopyOpacity 
CopyRed 
CopyYellow 
Darken 
DarkenIntensity 
DivideDst 
DivideSrc 
Dst 
Difference 
Displace 
Dissolve 
Distort 
DstAtop 
DstIn 
DstOut 
DstOver 
Exclusion 
HardLight 
HardMix 
Hue 
In 
Lighten 
LightenIntensity 
LinearBurn 
LinearDodge 
LinearLight 
Luminize 
Mathematics 
MinusDst 
MinusSrc 
Modulate 
ModulusAdd 
ModulusSubtract 
Multiply 
None 
Out 
Overlay 
Over 
PegtopLight 
PinLight 
Plus 
Replace 
Saturate 
Screen 
SoftLight 
Src 
SrcAtop 
SrcIn 
SrcOut 
SrcOver 
VividLight 
Xor 

मैं तुम्हें कुछ इसी तरह देख सकते हैं यदि आप फ़ाइल जहाँ आपके Magick::CopyOpacityCompositeOp परिभाषित किया गया है में देखने की उम्मीद: कमांड लाइन पर, आप के साथ उपलब्ध सम्मिश्रण मोड देख सकते हैं।

enter image description here enter image description here

मैं इस तरह एक आदेश चला सकते हैं:: तो, श्री बीन और एक मैजंटा अगर मैं ले एक ही आकार के आयत

convert MrBean.jpg overlay.png -compose blend -composite output.jpg 

और मैं इस मिलेगा:

enter image description here

अब, जो हो सकता है या नहीं हो सकता है, इसलिए मैं सभी avai के माध्यम से चला सकते हैं इस तरह करने के लिए सक्षम सम्मिश्रण मोड:

for blend in $(identify -list compose|grep -v Blur); do 
    convert -label "$blend" MrBean2.jpg overlay.png -compose $blend -composite miff:- 
done | montage - -tile 5x result.png 

जो इस जो विभिन्न परिणामों से पता चलता देता है:

enter image description here

+0

अच्छा जवाब @MarkSetchell। एक बार मिश्रण की पहचान हो जाने पर, उचित विधि के साथ रुबी को अनुवाद करना आसान होता है, या परिभाषित किया जाता है कि उस विशेष विधि के कारण क्या अनुकूलित किया जाना चाहिए। – Giuseppe

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