Schienen: Bild beschneiden, mit Büroklammer, S3 und RMagick
Ich bin versucht derzeit, einen code, der eine benutzerdefinierte Bild-cropping-system, ähnlich wie bei anderen auf dem internet, wo ein Benutzer kann wählen Sie einen Zuschneidebereich, und dann haben Sie Ihr Bild entsprechend beschnitten. Die Anwendung ist in Schienen und wir sind mit Büroklammer mit Amazon S3 zum speichern von Dateien. Ich habe eine Menge ärger, obwohl immer RMagick entsprechend zu beschneiden Sie 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 beschnitten.
Hat jemand versucht, so etwas wie dies mit einer Büroklammer vor? Das kann gar nicht möglich, aber jede Hilfe wäre sehr geschätzt werden.
- Wo genau hast du Schwierigkeiten?
- Ich bin mit Mühe das zugeschnittene Bild hochgeladen zurück zu S3 durch Büroklammer.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich in der Lage, dieses problem zu lösen für Sie die Zeit wie folgt:
Das wichtigste Anliegen hier ist die Geschwindigkeit, schlagen die Schaffung einer neuen temporären Datei, so dass Sie wahrscheinlich müssen wir schaffen unsere 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.
Könnten Sie einige attr_accessors auf dem Modell und legen Sie Sie in der controller-action vor dem erstellen der eigentlichen Datei. Die unten sollte funktionieren ..
Möchten Sie vielleicht, um einen genaueren Blick auf Büroklammer-Prozessoren.
Ich habe eigentlich das gleiche problem in meinem eigenen code, und habe das auf meiner todo-Liste.
attachment.instance
in Ihrem#make
Methode.