5

Rmagick を使用して画像のサイズを変更しようとしていますが、resize_to_fit常に最初に高さをサイズ変更する方法を使用すると、幅よりも優先されますが、ほとんどの画像が最初に幅にサイズ変更されているようです。とにかく、resize_to_fit「幅よりも高さを優先する」ことを伝える方法を使用していますか?

4

3 に答える 3

12

最初に高さのサイズを変更するとはどういう意味かわかりません。だからおそらく私は私の答えが間違っています。

サイズを変更する場合、次の3つの可能性があります。比率を維持する(resize_to_fit)、画像をトリミングする(resize_to_fill)、または画像を拡大/縮小する(scale?)

を使用resize_to_fitすると、最大幅とオプションの最大長を定義できます(デフォルトは指定された幅です)。

例:img.resize_to_fit(300)。写真に応じて、最大幅300または長さ300の写真が表示されます。他の寸法は比率によって計算されます。50x100の画像は150x300になります。100x50の画像は300x150になります。

使用できない300x400の画像が必要な場合はimg.resize_to_fit(300,400)、どの寸法が最初に収まるかを確認し、それに応じて他の寸法を計算します。

幅よりも高さを優先するということは、特定の高さ(300など)が必要であり、幅が画像の比率で計算される必要がある場合は、を使用できますresize_to_fit(1000000, 300)。幅1000000に達する前に高さ300に達するたびに、画像の高さは300になります。

于 2012-02-23T13:14:54.667 に答える
3

いくつかの考えといくつかのコード。

どのような違いがありますか? 最初に幅をどうやって見分けることができますか?最終結果が異なるサイズになる必要があるケースは見当たりません。品質の問題である場合は、例が役立つ場合があります。

API が、ある方向から別の方向にストレッチする方法を公開しているようには見えませんが、1 つまたは 2 つのメソッドを作成して試してみることはできます。以下に 2 つのアプローチがあります。1 つ目は、two_step_resizeが一方の方向にサイズ変更し、もう一方の方向にサイズ変更します。2 番目のresize_with_rotateは、画像を回転し、サイズを変更してから、元に戻します。

私が実行した例では、どちらのソリューションにも奇妙さは見られません。

require 'RMagick'


#Change the size in two steps, height first then width
def two_step_resize(img, filename, max_x, max_y)
  x = img.columns
  y = img.rows

  #make sure it's a float w/ the 1.0*
  ratio = (1.0*x)/y  

  new_y = max_y
  new_x = ratio * new_y

  if (new_x > max_x)
    new_x = max_x
    new_y = new_x / ratio
  end

  # do the change in two steps, first the height
  img.resize!(x, new_y);
  #then the width
  img.resize!(new_x, new_y)

  #save it, with the least compression to get a better image
  res.write(filename){self.quality=100}

end

#spin the image before resizing
def resize_with_rotate(img, output_filename, max_x, max_y)
  res = img.rotate(90).resize_to_fit(max_y, max_x).rotate(-90)
  res.write(output_filename){self.quality=100}
end

img = Magick::Image.read(filename).first
two_step_resize(img, "2-step.jpg", 100, 200)

img = Magick::Image.read(filename).first
resize_with_rotate(img, "rotate.jpg", 100, 200)
于 2010-07-15T00:45:10.120 に答える
1

高さの最大値を指定し、 Rmagick にchange_geometryメソッドを使用して対応する幅を計算させることができます。

これは、横長の画像の最大の高さを設定したいが、比率を維持するために対応する幅を指定したくない場合に役立ちます。

require "rmagick"
include Magick

img = ImageList.new("<path_to_your_img>") # assuming a landscape oriented img
img.change_geometry("x395") do |cols, rows, img| # set the max height 
  img.resize(cols, rows)
end

常にブロックを change geometry メソッドに渡す必要があることを覚えておいてください。詳細については、公式ドキュメントを参照してください。

乾杯

于 2017-06-06T09:23:32.253 に答える