Miniature quadrate con ImageMagick (conversione)?


Risposte:


19

Questo è spiegato nella documentazione ufficiale di ImageMagick sotto "Taglia la miniatura per adattarla" :

Un'alternativa, piuttosto che riempire l'immagine per adattarla alla dimensione specifica dell'anteprima che vogliamo, è invece tagliare le parti dell'immagine che non si adattano alla dimensione finale.

Ovviamente questo significa che in realtà perdi alcune parti dell'immagine originale, in particolare i bordi dell'immagine, ma il risultato è una miniatura ingrandita della parte centrale dell'immagine. Questo di solito è (ma non sempre) il soggetto principale dell'immagine, quindi è un metodo pratico per la creazione di miniature.

A partire da IM v6.3.8-3 è stato aggiunto il flag di opzione di ridimensionamento speciale '^' per facilitare questa operazione. Ridimensioniamo semplicemente usando questo flag, quindi ritagliamo le parti dell'immagine che traboccano della dimensione desiderata.

E nel contesto di un comando di esempio:

convert -define jpeg:size=200x200 hatching_orig.jpg  -thumbnail 100x100^ \
          -gravity center -extent 100x100  cut_to_fit.gif

7
Forse ... qualche tipo di descrizione?
— Ciao, il

Adoro le risposte vuote di Ignacio :-)
— Ciro Santilli 17 改造 中心 法轮功 六四 事件

55

Ignacio si è collegato alla documentazione corretta, tuttavia lo incollerò qui per comodità:

convert -define jpeg:size=200x200 original.jpeg  -thumbnail 100x100^ -gravity center -extent 100x100  thumbnail.jpeg

Allo stesso modo, quanto segue è per GraphicsMagick:

gm convert -size 200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 +profile "*" thumbnail.jpeg

Spiegazione:

  • -size 200x200 dice al decoder jpeg che abbiamo solo bisogno di questa risoluzione in modo che possa risparmiare memoria e leggere l'immagine sorgente più velocemente
  • -thumbnail 100x100^ ridimensionamento rapido rendendo il lato più corto 100
  • - gravity center centrare l'operazione successiva
  • -extent 100x100 applica l'immagine a una tela 100x100
  • +profile "*" non salvare alcun metainfo nel jpeg (riducendo l'immagine risultante)

3
Quando l'ho usato nella riga di comando (grafica magick one) ho un'immagine al centro, due sider sono pieni di bianco. Non quello descritto in questione. Sto facendo qualcosa di sbagliato?
— Umut Benzer,

2
Se stai usando Windows devi raddoppiare il carattere ^ per evitarlo. Ad esempio: -thumbnail 100x100 ^^
— George Filippakos,

3
Perché non dimensioni 100x100?
— Ciao mondo,

@HelloWorld: leggi "Imagemagick Geometry". Google, sarà facile da trovare.
— saurabheights,

11

Questo è un modo più semplice per farlo:

Il seguente comando ridimensiona il lato più piccolo a 100 pixel e ritaglia un quadrato di 100x100. È possibile aggiungere un -stripcomando per ridurre le dimensioni del file.

convert original.jpg -resize "100^>" -gravity center \ 
                     -crop 100x100+0+0 -strip thumbnail.jpg

A differenza di altri, non sta cercando di risparmiare memoria. Invece, fa quello che vuoi, e non di più. Inoltre, non ingrandirà le immagini.


Quando aggiungi una risposta tardiva a una domanda con risposte stabilite, è utile fornire una spiegazione sufficiente del perché la tua risposta offre qualcosa di unico e nuovo rispetto alle altre risposte.
— Jason Aller,

2
Grazie, non so perché gli altri abbiano complicato le loro risposte per cercare di risparmiare memoria quando OP non menziona nulla al riguardo.
— confused00

2

Sto usando la grafica per generare miniature di dimensioni precise, ma riempio l'immagine con una scacchiera invece di ritagliare la sporgenza.

gm convert -limit Threads 1 -size 320x180 pattern:checkerboard -background transparent -gravity center -resize 320x180 -extent 320x180 original.jpg -flatten -resize 112x65! -interlace Line 1 thumb_112x65.jpg

Opzioni spiegate.

gm convert

// Single threaded seems faster on smaller files
-limit Threads 1 

// Generate a checkerboard of size 320x180.
// Sets the relative size of the checkerboard squares,
// also sets the desired aspect ratio. In my case (16:9)
-size 320x180 pattern:checkerboard 

// Resize the input image and center it on a transparent layer.
-background transparent -gravity center -resize 320x180 -extent 320x180 orig.jpg

// Merge the layers
-flatten 

// Resize the output to the desired
// The ! causes the aspect ratio to be ignored, fixing any rounding errors.
// (Specify a size with the same aspect ratio as the checkerboard.)
-resize 112x65! 

// Use Progressive JPEG Encoding
-interlace Line 

// Output Image
thumb_112x65.jpg

1

Penso che tu stia cercando qualcosa come:

convert -crop 100x100+50+50 input_image.jpg output_image.jpg 

dove 100x100è la dimensione del rettangolo finale e 50x50la correzione .


Quell'immagine ritagliata, ma non crea miniature.
— marioosh,

1
@marioosh: non ho capito, puoi usare convert -thumbnail 100x100+50+50 input_image.jpg output_image.jpg, per maggiori informazioni controlla la risposta di Igancio Vazquez per un esempio o controlla la documentazione
— pconcepcion,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.