2009-07-22 11 views
7

Ich lade ein Foto hoch, es ist ein Rechteck. Wie kann ich die Größe ändern und auf ein Quadrat füllen?Wie beschneiden und füllen mit Paperclip (oder RMagick)?

Ich meine, wenn das Foto horizontal positioniert ist, sollte es oben und unten, zwei weiße Felder haben (um die Form eines Quadrats zu halten) und wenn es vertikal ist, sollte es zwei weiße Felder an den Seiten des Fotos haben .

Wenn ich PHP verwendet wird, eine dieser http://www.verot.net/php_class_upload_samples.htm verwendet haben

Werfen Sie einen Blick auf die

100x150, Verhältnis zu halten, füllen oben und unten

Beispiel

I verwende Büroklammer mit RoR. Wie ist der beste Weg das zu tun?

Antwort

1

Sie müssen einen Stil definieren. Here's an example.

+0

Ja, ich weiß, aber wie geht das? http://www.imagemagick.org/Usage/thumbnails/#fit – astropanic

+0

has_attached_file: Bild,: Stile => {: custom => "100x100>"} –

+0

Dies zentriert das Bild in der quadratischen Box – astropanic

17

Hier ist, was ich auf einer Schiene 3 App w/Büroklammer verwendet. Ich habe die folgenden ImageMagick-Optionen verwendet, um es zentriert zu machen: Hintergrund, Komposition, Gravitation und Ausdehnung. Ich benutze den mini_magick Prozessor.

has_attached_file :image, 
    :styles => { :large => ["855x570>", :jpg], :medium => ["432x288>", :jpg], :small => ["276x184>", :jpg], :tiny => ["195x130>", :jpg] }, 
    :processor => "mini_magick", 
    :convert_options => { 
    :medium => "-background white -compose Copy -gravity center -extent 432x288", 
    :small => "-background white -compose Copy -gravity center -extent 276x184", 
    :tiny => "-background white -compose Copy -gravity center -extent 195x130" 
    } 
+1

Gut geschriebenes Beispiel. Dies funktioniert in Rails 4 mit Paperclip 3.5.4. FYI Imagemagick setzt die Hintergrundfarbe auf Weiß, daher ist es nicht erforderlich, diese Option anzugeben. 'medium: '-compose Copy -gravity center -ausdehnung 432x288'' – scarver2

+0

Nur ein Kopf hoch: vergewissere dich, dass du in den Style-Definitionen kein nachstehendes' # 'hast. Also, ': large = [" 855x570 # ",: jpg]' wird nicht funktionieren, da die '#' nach dem '855x570' der Büroklammer signalisiert, das Bild auszuschneiden und zu zentrieren. –