代码之家  ›  专栏  ›  技术社区  ›  Shaomai888

如何使用carrierwave/minimagick合成将我的徽标放在上传的每一张图片的东南角?

  •  0
  • Shaomai888  · 技术社区  · 10 年前

    我有一个模型,允许用户使用carrierwave上传图片。我想把我的logo放在每张图片的东南角,然后我想让图片像平常一样保存(例如.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
    
    2 回复  |  直到 10 年前
        1
  •  1
  •   MilesStanfield    10 年前

    我相信你可以改变这条线

    process resize_to_limit: [400, 400]
    

    到这个

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

    然后,你可能需要也可能不需要你添加的关于重力的额外的极简代码。

        2
  •  1
  •   Jonas Schubert Erlandsson digitalPBK    8 年前
    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
    

    让这个发挥作用。