2

APIから画像のURLを取得するsinatraアプリがあり、それらをスケーリングして、サーバーに保存せずに提供したいと考えています。私が見たほとんどの宝石は、ローカル画像のみを取得し、キュー内の各画像を処理します。5つの画像を拡大縮小して、ページに表示するだけです。これを行うための迅速な方法はありますか?

より明確にする:

画像を外部(notmysite.com/img.jpgなど)で取得し、コードがページ上で拡大縮小された画像を提供する方法が必要です。このページは、フロントエンドでスケーリングされた画像を歪めるスクリプトによってレンダリングされるため、cssやその他のフロントエンドメソッドでは実行できません。

4

2 に答える 2

3

Dragonflyはimagemagickを使用して画像を拡大縮小します。これは、 MiniMagickで行った以前のコードからまとめたコードなので、かなり似ています。

ファイルをTempfileに入れます。私はここでFaradayTypheousを使ってこれを行いました。次に、magickを使用してスケーリングします。

require 'faraday'
require 'faraday_middleware'
#require 'faraday/adapter/typhoeus' # see https://github.com/typhoeus/typhoeus/issues/226#issuecomment-9919517 if you get a problem with the requiring
require 'typhoeus/adapters/faraday'

configure do
  Faraday.default_connection = Faraday::Connection.new( 
    :headers => { :accept =>  'image/*',
    :user_agent => "Sinatra via Faraday"}
  ) do |conn|
    conn.use Faraday::Adapter::Typhoeus
  end
end

helpers do
  def grab_image_and_scale
    response = Faraday.get url # you'll need to supply this variable somehow, your choice
    filename = "SOMETHING.jpg"
    tempfile = Tempfile.open(filename, 'wb') { |fp| fp.write(response.body) }

    thumb = MiniMagick::Image.open( tempfile.path )
    thumb.thumbnail( "75x75" )
    thumb.write( File.join settings.public, "images", "thumb_#{filename}") 

    scaled = MiniMagick::Image.open( secure_path )
    scaled.resize( "600" )
    scaled.write( File.join settings.public, "images", "scaled_#{filename}")
  end
end

パブリックイメージフォルダーへのパスを一時ファイルに変更する方法を検討するのはあなたに任せます(そして、それがどのように行われるかを共有していただければ幸いです:)

于 2013-01-12T00:13:43.140 に答える
0

Ruby や sinatra に関係なく、HTML タグwidthheight属性を追加する方法があります。img次のような結果になります。

<img src="img.source.from.API.JPG" width="2000px" height="100px" />

編集

別の方法は、 https ://stackoverflow.com/a/11333825/693597 で提案されているように、javascript を使用してディメンションを変更することです。JS ファイルを作成し、HTML のヘッダーに含めることを検討してください。

于 2013-01-11T21:24:49.883 に答える