2015-09-30 32 views
5

一連の画像にオーバーレイを適用してから1つにマージするようにしています。今のところ、ImageMagickはオーバーレイを適用する代わりに適用された色にイメージを変換しているようです。私たちがどうやって何をすべきかについてのドキュメントはあまり明確ではありません。あなたはこれについて何か洞察を持っているなら、私は感謝します。コードは次のとおりです。Railsで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)を置き換えるので、私はRoRのにはないが、私はあなたがソリッドカラーを使用して画像を置き換えるのではなく、あなたのイメージを重ねていると信じています。

の代わりに:

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このようなlableブレンディングモード:様々な結果を示しており、これを与え

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

Nice答え@MarkSetchell。ブレンドが特定されたら、Rubyを適切な方法で定義した場合はそれを翻訳したり、その特定の方法のために必要なものを知っている方が簡単です。 – Giuseppe

関連する問題