0

Carrierwave を使用して、アップロードされたファイルを 16 個のタイルに分割して処理できることに関する詳細について、私は高低を検索しました。コマンドラインから ImageMagick を使用して、次のようにファイルを分割できることはわかっています。

convert imagename: -crop 4x4@ +repage +adjoin imagename_%d.gif

例えば。これは、ファイルを rose_0.gif から rose_15.gif に並べて保存するのに完全に機能します。

同じ機能を実行するRMagickを使用して何かを見つけることができませんが、Ruby on Railsなどを使用して同じ機能を実行する次のコードに出くわしました:

def split_images
  #'image' is a ImageMagick Object
  width  = image.cols/number_cols
  height = image.rows/nubmer_rows
  images = []
  0.upto(number_rows-1) do |x|
    0.upto(number_cols-1) do |y|
      images << image.crop( Magick::NorthWestGravity, x*width, y*height, width, height, true)
    end
  end
end

iOS アプリから画像をアップロードし、Carrierwave で version: ルーチンを作成して処理を処理することで、Carrierwave に画像をタイル表示させようとしています。

これを行うことは可能ですか?その場合、ファイルはどのように保存されますか? さらに重要なことに、ビュー内のファイルを「呼び出す」または参照するにはどうすればよいでしょうか。誰かが私を正しい方向に向けることができますか? または代替アプローチを提案しますか?

おそらく 16 個の異なる version: コマンドを記述できることはわかっていますが、これは少しばかげているように思えます。

CarrierWave や ImageMagick などにあるものはすべて読んだような気がしますが、困惑しています。

どんな助けでもありがたく受け取られます。

前もって感謝します

4

1 に答える 1

0

他の誰かが同じことをしようとしている場合に備えて、以下を使用してほとんど解決したと思います。答えを提供します。

# encoding: utf-8

class PhotoUploader < CarrierWave::Uploader::Base

  # Include RMagick or MiniMagick support:
  include CarrierWave::RMagick
  # include CarrierWave::MiniMagick

  process :resize_to_limit => [640, 1136]
  process :convert => 'png'

  NUMBER_OF_COLS = 4
  NUMBER_OF_ROWS = 4

  # Choose what kind of storage to use for this uploader:
  storage :file
  # storage :fog

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :small do
    process :resize_to_limit => [100, 100]
  end

  0.upto(NUMBER_OF_ROWS-1) do |x|
    0.upto(NUMBER_OF_COLS-1) do |y|
      name = "image#{x}#{y}"
      version(name) {
        process :name => [x,y,160,284]
      }
    end
  end

  def name(x,y,width,height)
    manipulate!(:format => 'png') do |img|
      img.crop(Magick::NorthWestGravity, x*width, y*height, width, height, true)
    end
  end

  # Add a white list of extensions which are allowed to be uploaded.
  # For images you might use something like this:
  def extension_white_list
    %w(jpg jpeg gif png)
  end

end

幅と高さの寸法をコードにハードコーディングする必要があることにまだ満足していませんが、実際の画像の幅と高さを渡すために @geometry を機能させることができませんでしたが、一瞬。誰かが何か改善点があれば、私は感謝します。

正しい方向に私を指摘してくれた ImageMagickの Ryan Bates のRailscastに感謝します。

于 2013-11-08T22:08:33.307 に答える