<%=
require "mini_magick"
require 'rmagick'
first_image = MiniMagick::Image.new("#{Rails.root}/public/img/summon.png")
second_image = MiniMagick::Image.new("#{Rails.root}/public/img/(1).png")
result = first_image.composite(second_image) do |c|
c.compose "Over"
c.geometry "+20+20"
end
result.write "output.jpg"
%>
大家好,我想让heroku每次在页面上显示不同的图像。 但是当我检查页面时,什么都没有,我不知道哪里出了问题,有人可以告诉我吗?
答案 0 :(得分:0)
简短的答案是您的<%= %>
块实际上不会生成任何要渲染的html
。我相信您应该可以执行以下操作:
<%=
require "mini_magick"
require 'rmagick'
first_image = MiniMagick::Image.new("#{Rails.root}/public/img/summon.png")
second_image = MiniMagick::Image.new("#{Rails.root}/public/img/(1).png")
result = first_image.composite(second_image) do |c|
c.compose "Over"
c.geometry "+20+20"
end
result.write "output.jpg"
image_url('output.jpg')
%>
并显示新图像。 (这是假定上面所有代码实际上都能正常工作。)您可能不得不摆弄image_url('output.jpg')
,这取决于图像的写入位置。
但是,这很丑。这里有很多事情要解决。
首先,在我看来,您的require
语句属于config/application.rb
。
然后,该代码的实质不在视图中,而是(至少)在控制器中。更好的是,它将属于服务。因此,假设您有:
#app/services/composite_image_service.rb
class CompositeImageService
attr_accessor *%w(
args
).freeze
class << self
def call(args={})
new.call(args)
end
end # Class Methods
#==============================================================================================
# Instance Methods
#==============================================================================================
def initialize(args)
@args = args
end
def call
first_image = MiniMagick::Image.new("#{Rails.root}/public/img/summon.png")
second_image = MiniMagick::Image.new("#{Rails.root}/public/img/(1).png")
first_image.composite(second_image) do |c|
c.compose "Over"
c.geometry "+20+20"
end.write("output.jpg")
end
end
现在,在您要生成新图像的控制器中,执行以下操作:
FooController < ApplicationController
def some_action
CompositeImageService.call
end
end
然后,在您的some_action
视图中,执行以下操作:
<%= image_url 'output.jpg' %>
我认为应该做到的。
现在: