ОК, разобрался. Может быть, кто-то найдет это полезным.
Внутри моего загрузчика CarrierWave соответствующие биты:
include CarrierWave::RMagick
process :shadow
def shadow
manipulate! do |img|
layers = Magick::ImageList.new
image = Magick::Image.read(img.filename).first
shadow = image.clone
shadow = shadow.shadow(0, 0, 4.0, 0.5)
shadow = shadow.colorize(1.0, 1.0, 1.0, 'gray25')
layers << shadow << image
result = layers.optimize_layers(Magick::MergeLayer)
end
end
Ключом к тому, чтобы заставить RMagick работать, был метод optimize_layers.