图像水印 MiniMagick & Rails 5.2

问题描述 投票:0回答:1

我正在尝试为模型的产品图像添加水印。我已经设置了静态图像进行测试,但出现错误,我不明白为什么。

任何人都可以帮助我解释为什么我会收到此错误:

“CIAO12.png”的未定义方法“composite”:String

当前设置: 轨道 5.2 gem 'mini_magick', '~> 4.8' (包含在 Gemfile 中)

Brew安装imagemagick(成功)

代码正在静态图像上进行测试,但将更改为产品图像而不是“CIA012.png”图像。

显示动作

<div class="card-body">
  <h5 class="card-title"><%= @product.product_name %></h5>
  <% if @product.image.attached? %>
   <%= image_tag(@product.watermark) %>
  <% end %>
</div>

产品型号

def watermark
  first_image  = "CIAO12.png"
  second_image = "watermark.png"
  result = first_image.composite(second_image) do |c|
    c.compose "Over"    # OverCompositeOp
    c.geometry "+20+20" # copy second_image onto first_image from (20, 20)
  end
  result.write "output.jpg"
end
ruby-on-rails imagemagick watermark minimagick ruby-on-rails-5.2
1个回答
0
投票

问题是您试图在

String
对象上调用复合方法。您应该在
MiniMagick::Image
对象上调用它。如果其他人面临同样的问题,我希望这会有所帮助。

require 'mini_magick'

def watermark
  first_image = MiniMagick::Image.open("CIAO12.png")

  second_image = MiniMagick::Image.open("watermark.png")

  result = first_image.composite(second_image) do |c|
    c.compose "Over"   
    c.geometry "+20+20"
  end

  result_path = "path/to/save/result.png" 
  result.write(result_path)

  result_path
end
© www.soinside.com 2019 - 2024. All rights reserved.