这是一个简单的原始Rails模型,具有单个url
属性。
class Photo < ActiveRecord::Base
validates :url, presence: true
def watermark
remote_photo = MiniMagick::Image.open(url).write("#{Rails.public_path}/photos/photo-#{id}.jpg")
photo = MiniMagick::Image.open("#{Rails.public_path}/photos/photo-#{id}.jpg")
marked_photo = photo.composite(mark, 'jpg') do |c|
c.gravity 'SouthEast'
c.geometry '+15'
end
marked_photo.write(marked_path)
File.delete("#{Rails.public_path}/photos/photo-#{id}.jpg")
end
def marked_path
"#{Rails.public_path}/photos/photo-marked-#{id}.jpg"
end
private
def mark(mark = 'mark.jpg')
@mark ||= MiniMagick::Image.open("#{Rails.public_path}/#{mark}")
end
end
#watermark
方法将标记图像放在照片的右下角,并将文件写入public/photos/photo-marked-#{id}.jpg
。它在我的本地机器上运行完美,但在Heroku上,返回的图像大约为600x800px,变为10x15px。
答案 0 :(得分:0)
好的,问题在于我已经指定了几何属性值。在c.geometry '+15'
的情况下,ImageMagick将15作为宽度并调整图像大小以保持纵横比。为了保持原始大小并应用水平偏移,该值应该看起来像'x+15'
,用于widthxheight+offset
。
以上所有内容都是关于ImageMagick的6.5.7版本,它是Heroku上安装的版本。最初的'+15'
在最新版本中运行良好。
感谢@mschoening,他帮我解决了这个问题。