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.