Nedjustere antallet af farver i et jpg til 8 bit
Hej med jer...Jeg skal hente nogle jpg billeder fra nettet og gemme dem som gif billeder.
Jeg har brugt ImageIO til at hente mit billede (takket være http://www.eksperten.dk/spm/763694), og det virker fint. Jeg har prøvet at gemme det som gif vha ImageIO, men det duer ikke, fordi der er for mange farver i jpg billedet. Jeg har siden fundet ud af at mit program skal matche en ældre version java, så jeg tør alligevel ikke binde an på at den selv kan encode gif.
Jeg har siden kastet min lid til Acme.JPM.Decoders.GifEncoder (http://www.acme.com/java/software/Acme.JPM.Encoders.GifEncoder.html) som et seriøst bud på en gif encoder. Det hele går også fint, indtil jeg skal til at konvertere. Den bryder sig HELLER ikke om de mange farver.
Jeg kan se at Acmes encoder har en SetColorModel metode, og det lyder jo som et oplagt sted at få skruet ned for antallet af farver. :-?
Nu ville det have været rart hvis jeg bare havde kunnet lave en new ColorModel(8), men i alle subclasses til ColorModel skal jeg så vidt jeg kan se ud i at have byte[] af billedet.
Jeg vil være rigtig ked af, hvis jeg selv "manuelt" skal til at regne mig frem til hvilke farver der skal mappes til hvad, og gennemgå billederne pixel for pixel. Er der virkelig ikke en nem måde at nedjustere antallet af farver i et billede (og stadig få et resultat der er til at holde ud at se på)?
Til dem der gerne vil se kode så har jeg ekstraheret essensen her:
---8<----------
bImage = ImageIO.read(new URL("http://domæne.dk/billede.jpg"));
FileOutputStream fileOutputStream = new FileOutputStream(new File("c:\\billede.gif"));
GifEncoder gifEncoder = new GifEncoder(bImage, fileOutputStream);
gifEncoder.setColorModel(new IndexColorModel(8,hvad-skal-jeg-dog-finde-på-at-skrive-her???));
gifEncoder.encode();
fileOutputStream.close();
---8<----------
nogen gode ideer?
