Un antico detto napoletano dà il titolo a questo blog e ne segna il percorso...
Non ci resta che fravecare e sfravecare.
giovedì 15 dicembre 2005
risultato
#!/usr/bin/ruby
#
# PhotoCompose.rb ver.: 0.1Alfa
# @Autore: Vincenzo Visciano
#
# @Rilasciato sotto licenza 'fateci un po' quello che vi pare'
#
# descrizione: Programma per la manipolazione delle immagini.
#
# data una directory contenente immagini e una immagini di riferimento,
# crea una immagine risultante raffigurante l'immagine di riferimento
# e composta dalle immagini contenute nella directory.
#
# $ PhotoCompose.rb immagineDiPartenza.jpg 100 1024x768
require 'RMagick'
include Magick
fotoOriginale = ARGV[0]
dimensioniFotoRisultato = ARGV[2].split("x")
numeroRiquadri = ARGV[1].to_i
listaFoto = Dir["*.{jpg,JPG}"]
originale = Magick::Image.read(fotoOriginale).first
larghezzaRiquadro = originale.columns / numeroRiquadri
altezzaRiquadro = originale.rows / numeroRiquadri
larghezzaFotoRisultato = dimensioniFotoRisultato[0].to_i
altezzaFotoRisultato = dimensioniFotoRisultato[1].to_i
larghezzaRiquadroRisultato = larghezzaFotoRisultato / originale.columns * larghezzaRiquadro
altezzaRiquadroRisultato = altezzaFotoRisultato / originale.rows * altezzaRiquadro
conta = 0
print "creo miniature ..."
filesSorgenti = Array.new
miniature = Array.new
listaFoto.each { |nomefile|
filesSorgenti[conta] = Magick::Image.read(nomefile).first
miniature[conta] = filesSorgenti[conta].resize(larghezzaRiquadro, altezzaRiquadro, LanczosFilter, 0.8)
filesSorgenti[conta].resize!(larghezzaRiquadroRisultato, altezzaRiquadroRisultato)
conta += 1
}
print " fatto!\n\r"
print "Compongo immagine risultato ..."
nuovaImmagine = Magick::Image.new(larghezzaFotoRisultato, altezzaFotoRisultato)
sostituto = Magick::Image.new(larghezzaRiquadroRisultato, altezzaRiquadroRisultato)
riga = colonna = 0
(numeroRiquadri*numeroRiquadri).times do
riquadro = originale.crop(0+(colonna*larghezzaRiquadro),0+(riga*altezzaRiquadro), larghezzaRiquadro, altezzaRiquadro)
differenza = [nil, nil, nil]
conta = 0
miniature.each { |miniatura|
diff = riquadro.difference(miniatura)
if (differenza[0] == nil) || (diff[0] < differenza[0])
sostituto = filesSorgenti[conta]
differenza = diff
end
conta += 1
}
nuovaImmagine.composite!(sostituto, 0+(colonna*larghezzaRiquadroRisultato), 0+(riga*altezzaRiquadroRisultato), ReplaceCompositeOp)
if colonna == numeroRiquadri-1
colonna = 0
riga += 1
else
colonna += 1
end
end
nuovaImmagine.write("risultato.jpg")
print " fatto!\n\r"
nuovaImmagine.display
exit
Iscriviti a:
Commenti sul post (Atom)
7 commenti:
in che senso scusa!?!? :-P
Che emozione, la prima volta che leggo un codice rilasciato dal Becienzo!
E bbbravo!
Se solo sapessi che guarda caso proprio in questi giorni cercavo una cosa equivalente!
oi pigliapost, da quanto tempo non avevo tue notizie...
questo è il mio primo esperimento con questo merabiglioso linguaggio che è Ruby, il codice va un po' ottimizzato e appena ho un po' di tempo lo faccio.
Voglio prevedere che se tra due foto la somiglianza è piccola deve scartare quella che ha già utilizzato e cose di questo genere.
se vi serve una mano a farlo funzionare contattatemi pure...
e come si usa sta cosa?, voglio dire...dove la scrivoooo??
Azz... ma allora sei un programmatore d''a capa 'o pere!...
Neanche il tempo di darti l'idea :-)
L'unica cosa è che le foto che compongono l'immagine grande sono troppo piccole e non si distingue cosa raffigurano... almeno nell'immagine che hai postato
uh che bello!!
ma lo voglio usare pure io!! come faccio??
Ciao a tutti,
ho visto che per far funzionare su windows il programmino bisogna installare un po' di cose e il procedimento non è immediato.
Il testo che trovate nel post deve essere scritto in un comune file di testo e salvato con il nomeCheViPare ma avete bisogno di installare l'interprete ruby (per mac, per windows)
Non metto le istruzioni per linux perchèp quelli che usano linux ne ne dovrebbero avere bisogno... :-P
poi andrebbero installate anche le librerie RMagick, le trovate qui... (per windows, per mac, ma per installarle avete bisogno di rubygem
allora facciamo così, io comunque devo fare delle modifiche... lo riscirvo e lo faccio in modo che dibbiate scaricare un solo file e poi eseguirlo... ;-)
ps ci sarà da aspettare un po' di tempo libero...
Posta un commento