我正在尝试为模型的产品图像添加水印。我已经设置了静态图像进行测试,但出现错误,我不明白为什么。
任何人都可以帮助我解释为什么我会收到此错误:
“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
问题是您试图在
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