Frage

Ich bin derzeit versuchen zu code a custom image cropping system ähnlich zu anderen auf dem internet, wo ein Benutzer können wählen Sie eine gewünschte Fläche und haben dann Ihr Bild passend zugeschnitten.Die Anwendung ist in Rails und wir sind mit Büroklammer mit Amazon S3 zum speichern von Dateien.Ich habe eine Menge ärger, obwohl immer RMagick angemessen zu Ernte die Datei von S3.Hier ist der aktuelle code (der nicht funktioniert):

   if params[:width].to_i > 0 and params[:height].to_i > 0 then
      photo = Photo.find(params[:id])
      image_data = Net::HTTP.get_response(URI.parse(photo.photo.url(:big))).body
      orig_img = Magick::ImageList.new
      orig_img.from_blob(image_data)

      args = [params[:x1].to_i, params[:y1].to_i, params[:width].to_i, params[:height].to_i]
      orig_img.crop!(*args)
      photo.update_attributes({:photo => orig_img.to_blob})

      photo.photo.reprocess!
      photo.save
    end

Das Hauptproblem ist, dass das zugeschnittene Bild wird nicht hochgeladen zurück zu S3 durch Büroklammer, und somit nicht richtig abgeschnitten.Hat jemand versucht, so etwas wie dies mit Büroklammer vor?Dies kann nicht einmal möglich, aber jede Hilfe würde sehr geschätzt werden.

War es hilfreich?

Lösung

Ich habe in der Lage, dieses problem zu lösen, für die Zeit wie folgt:

  photo = Photo.find(params[:id])
  image_data = Net::HTTP.get_response(URI.parse(photo.photo.url(:big))).body
  orig_img = Magick::ImageList.new
  orig_img.from_blob(image_data)

  args = [params[:x1].to_i, params[:y1].to_i, params[:width].to_i, params[:height].to_i]
  orig_img.crop!(*args)

  tmp_img = Tempfile.new("image_data")
  orig_img.format = "png"
  tmp_img.write(orig_img.to_blob)
  photo.photo = tmp_img
  tmp_img.close

  photo.photo.reprocess!
  photo.save

Das Hauptanliegen hier ist die Geschwindigkeit, schlagen die Schaffung einer neuen temporären Datei, so werden wir wohl müssen unseren eigenen benutzerdefinierten Schnittstelle.Hoffentlich kann dies ein guter Ausgangspunkt für Menschen, die die Lösung eines ähnlichen Problems.

EDIT:Nur eine kurze Notiz, Tempfile, ist Teil der Büroklammer Bibliotheken.

Andere Tipps

Könnten Sie einige attr_accessors auf dem Modell und legen Sie diese in die controller-Aktion vor dem erstellen der eigentlichen Datei.Die unten sollte funktionieren ..

class Poodle < ActiveRecord::Base
  has_attached_file :avatar, :styles => Proc.new{|a| a.instance.get_styles}
  attr_accessor :width, :height


  def get_styles(style = "medium")
    return {style.to_sym => [self.width, self.height].join("x") + ">" }
  end
 end

Möchten Sie vielleicht einen genaueren Blick auf Büroklammer-Prozessoren.

Ich habe eigentlich das gleiche problem in meinem eigenen code ein, der auf meiner todo-Liste.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top