2015-09-30 15 views
5

Chúng tôi đang cố gắng áp dụng lớp phủ trên một loạt hình ảnh trước khi hợp nhất chúng thành một. Ngay bây giờ có vẻ như imagemagick đang chuyển đổi hình ảnh thành màu được áp dụng thay vì áp dụng lớp phủ. Các tài liệu không rõ ràng về những gì chúng ta nên làm khác đi. Tôi đánh giá cao nếu bạn có bất kỳ thông tin chi tiết về điều này. Mã sau:Lớp phủ màu với độ mờ sử dụng ImageMagick trong Rails

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 

Trả lời

0

Tôi không vào ROR, nhưng tôi tin rằng bạn đang thay thế hình ảnh của bạn với màu sắc rắn, thay vì bao phủ hình ảnh của bạn, bởi vì Copy_Opacity phương pháp tổng hợp thay thế kênh alpha (Copy_Opacity method).

Thay vì:

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

Hãy thử điều này:

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

Xem Alpha Compositing (RMagick) - The colorize composite operation

+1

Đó không làm việc thân nhưng cảm ơn bạn tôi đã thử nó. Nó chỉ là imagemagick có tài liệu sôi nổi như vậy ... soooo viết nhiều ... –

3

tôi không nói Ruby, nhưng tôi nghi ngờ bạn có chế độ hoà trộn sai. Tại dòng lệnh, bạn sẽ nhìn thấy chế độ pha trộn sẵn với:

identify -list compose 

Output

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 

Tôi hy vọng bạn có thể nhìn thấy một cái gì đó tương tự nếu bạn nhìn vào các tập tin mà Magick::CopyOpacityCompositeOp của bạn được xác định. Vì vậy, nếu tôi lấy Mr Bean và đỏ tươi hình chữ nhật cùng kích thước:

enter image description here enter image description here

tôi có thể chạy một lệnh như thế này:

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

và tôi sẽ có được điều này:

enter image description here

Bây giờ, có thể, hoặc có thể không phải là thứ bạn muốn, vì vậy tôi có thể thực hiện tất cả các thông tin chế độ hòa trộn lable như thế này:

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 

mang đến cho này trong đó cho thấy các kết quả khác nhau:

enter image description here

+0

Câu trả lời hay @MarkSetchell. Khi việc kết hợp được xác định, sẽ dễ dàng dịch sang Ruby với phương pháp thích hợp nếu nó được xác định, hoặc biết cần phải điều chỉnh những gì theo phương thức cụ thể đó. – Giuseppe

Các vấn đề liên quan