Ruby-vip libreria di elaborazione immagine.Ci sono buoni esempi di utilizzo?
-
13-12-2019 - |
Domanda
Io sono completamente nuovo per l'elaborazione dell'immagine.Io non so nulla su ciò che è JPEG internamente e come funziona.
Mi chiedo, se riesco a trovare qualche pezzo di codice ruby eseguire seguendo questa semplice operazione:
- Aprire il file jpeg.
- Scorrere ogni pixel e impostare il colore di fx verde.
- Scrivere il risultato in un altro file.
Io sono particolarmente interessato a come questo può essere realizzato utilizzando ruby-vip biblioteca
https://github.com/ender672/ruby-vips
Il mio obiettivo è imparare come eseguire le operazioni di base operazioni di elaborazione delle immagini utilizzando ruby-vip (correzione gamma, luminosità, tinta, ...)
Eventuali link a esempi più complessi di 'hello world'-come uno su ruby-vip la pagina di github sarebbe molto apprezzato!
Se ci sono alternative al ruby-vip, vorrei essere grati per loro.
AGGIORNAMENTO
Molto è accaduto da quando ho fatto questa domanda:
- ruby-vip è un gioiello: http://libvips.blogspot.co.uk/2012/06/ruby-vips-launches.html
- riscrittura completa per vips8, ora basato su ruby-ffi
- Repository del codice sorgente è qui: https://github.com/jcupitt/ruby-vips/
- Esempi di utilizzo: https://github.com/jcupitt/ruby-vips/wiki/Examples
- Concetti di base di vip, di elaborazione delle immagini: https://github.com/jcupitt/ruby-vips/wiki/Basic-concepts
- ruby-vip integrazione in CarrierWave uploader plugin per Ruby on Rails: https://github.com/eltiare/carrierwave-vips
- ruby-vip è quello di ufficiale di backend per ActiveStorage in rails6
Soluzione
aggiornamento ruby-vip ha cambiato un po ' visto che questa risposta è stato scritto.Ho rivisto per la corrente (2018) versione.
Io sono uno dei responsabili di libvips, il libreria di elaborazione immagine che ruby-vip avvolge.
Tim ruby-vip repository non è stato toccato per un po'.Ho una forcella qui che funziona con corrente libvips:
https://github.com/jcupitt/ruby-vips
Ci sono alcuni esempi qui:
https://github.com/jcupitt/ruby-vips/tree/master/example
Per impostare i canali rosso e blu a zero e basta lasciare un verde immagine si potrebbe moltiplicare R e B zero e G per 1.ruby-vip utilizza matrici per rappresentare i pixel costanti, in modo che si può semplicemente scrivere:
out = in * [0, 1, 0]
Un completo praticabile esempio potrebbe essere:
#!/usr/bin/ruby
require 'vips'
im = Vips::Image.new_from_file '/home/john/pics/theo.jpg'
im *= [0, 1, 0]
im.write_to_file 'x.jpg'
C'è un trucco è possibile utilizzare per new_from_file
:se sai che sarà solo essere facendo il semplice top-to-bottom operazioni sull'immagine, come l'aritmetica o il filtro o si ridimensiona, si può dire rubino-vips che hai solo bisogno di accesso sequenziale ai pixel:
im = Vips::Image.new_from_file '/home/john/pics/theo.jpg', access: :sequential
Ora ruby-vip trasmetterà in streaming la tua immagine.Esso verrà eseguito il carico, il moltiplicarsi e il salvataggio di tutti in parallelo e non tenere mai più di un paio di linee di scansione di pixel in memoria in qualsiasi momento.Questo può dare davvero un bel miglioramento per la velocità e l'utilizzo della memoria.
Per cambiare l'immagine di gamma si può provare qualcosa di simile:
im = im ** 0.5 * 255 / 255 ** 0.5
Però che possa essere un po ' lento (sarà chiamata pow() tre volte per ogni pixel), sarebbe molto più veloce a fare una tabella di ricerca, eseguire il pow() che, quindi associare l'immagine attraverso la tabella:
lut = Vips::Image.identity
lut = lut ** 0.5 * 255 /255 ** 0.5
im = im.maplut lut
Qualsiasi domanda, non esitate ad aprire loro la rubyvips issue tracker:
Altri suggerimenti
Mi dispiace, non conosco i VIP di rubino, ma ImageMagick è un classico quando si tratta di elaborazione delle immagini. Ci sono attacchi rubini sotto forma di rmagick ( repo corrente ), e puoi ricavare molte funzionalità dai documenti ImageMagick, ma ci sono anche tre tutorial qui , così come un sacco di esempi sul web.
Se vuoi davvero andare in profondità nella teoria dell'elaborazione delle immagini, che nelle sue radici è una forma di elaborazione del segnale (questo è totalmente eccitante e gratificante in quanto spesso consente di applicare algoritmi molto simili su immagini e Segnali audio / video, ma alla fine diventerà molto pesante sulle trasformazioni di matematica - Fourier), quindi, se la matematica non ti spaventa, posso solo consigliare di leggere il libro di Gonzalez e Woods, direi che è il riferimento definito in questo campo. È costoso, ma c'è tutto ciò di cui hai bisogno lì per iniziare e ben oltre. Ecco anche una pagina con link agli ebook gratuiti se desideri iniziare senza spesa un sacco di soldi prima.