如何使用 carrierwave/minimagick composite 将我的标志放在每张上传图片的东南角?

How to use carrierwave/minimagick composite to put my logo on the southeast corner of every image uploaded?

我有一个模型可以让用户使用载波上传图片。我想将我的徽标放在每张图片的东南角,然后我希望图片像往常一样保存(示例。com/images/1)。我知道我必须使用复合材料,但尽管谷歌搜索了几个小时,但我离这还差得很远。这是我最好的猜测。

class PictureUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  process resize_to_limit: [400, 400]
  process :logo

def logo
  manipulate! do |img|
    logo = ::MiniMagick::Image.open("#{Rails Name}/app/assets/images/logo.png")
    img = img.composite(logo, Magick::SouthEastGravity, 15, 0, Magick::OverCompositeOp)
  end
end

我相信你可以改变这条线

process resize_to_limit: [400, 400]

到这个

process resize_to_limit: [400, 400, 'SouthEast']

然后你可能需要也可能不需要你添加的关于重力的一些额外的 minimagick 代码。

process :watermark   

def watermark
  second_image = MiniMagick::Image.open("https://s3.amazonaws.com/....logo.png")

  manipulate! do |img|
    img.composite(second_image) do |c|
      c.compose "Over"    # OverCompositeOp
      c.gravity "Southeast" # copy second_image onto first_image from (20, 20)
    end
  end
end

成功了。