ImageMagick缩小Heroku上处理过的图像

时间:2014-07-09 18:26:53

标签: ruby-on-rails heroku imagemagick minimagick

这是一个简单的原始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。

1 个答案:

答案 0 :(得分:0)

好的,问题在于我已经指定了几何属性值。在c.geometry '+15'的情况下,ImageMagick将15作为宽度并调整图像大小以保持纵横比。为了保持原始大小并应用水平偏移,该值应该看起来像'x+15',用于widthxheight+offset

以上所有内容都是关于ImageMagick的6.5.7版本,它是Heroku上安装的版本。最初的'+15'在最新版本中运行良好。

感谢@mschoening,他帮我解决了这个问题。