Kirjoittaja Aihe: jpg kuvien exif datat inttiksi javassa  (Luettu 2184 kertaa)

Tommi-The-Man

  • Käyttäjä
  • Viestejä: 174
    • Profiili
jpg kuvien exif datat inttiksi javassa
« : 06.04.08 - klo:10.27 »
Tarkoitus olisi saada jpg-kuvan pituus ja leveys int-muuttujiksi jotta niitä voisi myöhemmin ohjelmassa käytää. Jonkinlaisen mallikoodin jos voisi saada tänne. Kiitokset jo etukäteen.

peran

  • Vieras
Vs: jpg kuvien exif datat inttiksi javassa
« Vastaus #1 : 06.04.08 - klo:11.31 »
Muistelisin javan tukevan jpg-kuvia, joten lataamalla kuvat muistiin ja katsomalla width ja height arvot näet kuvien koot. Ei kovin fiksu ratkaisu, mutta varmaankin toimiva.

Toinen ratkaisumalli, vaikken jpg:n headereita tunnekaan, niin todennäköisesti kuvan alussa header-osassa on leveys ja korkeus tiedot. Hexdumpilla voit katsoa jpg-tiedostoista, joista tiedät leveys- ja korkeus-tiedot, missä kohtaa löytyy 2, 3 tai 4 merkin mittainen määritelmä leveydestä ja korkeudesta. Tietenkin jos 3:n tai 4:n merkin mittaisia määritelmiä, niin ne näkyvät tiedostoissa nollina.

BMP:stä mulla saattaisi olla tollainen hexdumpilla etsitty koko-tiedot, muttei jpg:stä, mutta näe nyt edes sen verran vaivaa, että tutkit sitä kuvaa hexdumpilla, ja päättele kuvan koko.

Huom. Esim. 2288x1712 on hexana 08f0x06b0, joten etsittäviä, kun leveyttä etsitään, olevia hexjärjestyksiä ovat:
f008 tai ef08 tai 08f0 tai 08ef
Tämä siksi, että tiedostossa 1x1 pixelin kuva saatetaan esittää 0x0:na, lisäksi usein pienimmät yksiköt ilmoitetaan ennen suurimpia. Tietenkin noiden sarjojen lähettyvillä on joko 06 tai b006 tai af06.

Kyseiset arvot ko. kokoisesta jpg-kuvasta tai yleensäkin kuvasta löytyvät joko alusta tai lopusta tiedostoa.

Edit teimpäs senkin sinun puolestasi:
Koodia: [Valitse]
hexdump 00005.jpg |grep f008
0002180 ff08 00c0 0811 b006 f008 0103 0021 1102

Tässä pitäisi olla kaikki tarpeellinen tieto.  ;)
« Viimeksi muokattu: 06.04.08 - klo:12.25 kirjoittanut peran »

Risto H. Kurppa

  • Käyttäjä
  • Viestejä: 3024
  • Useita Kubuntuja ajossa.
    • Profiili
    • http://risto.kurppa.fi
Vs: jpg kuvien exif datat inttiksi javassa
« Vastaus #2 : 06.04.08 - klo:15.46 »
Koodia: [Valitse]
public Kuva(File[] tiedostot, int kuvalaskuri){
kuvaindeksi = kuvalaskuri;
kuvafile = tiedostot[kuvaindeksi];
Viesti.kirjoita("Luetaan kuvaa..");
//luetaan kuva
FileInputStream fis=null;
try {
//fis = new FileInputStream(annettuTiedosto);
fis = new FileInputStream(kuvafile);
} catch (FileNotFoundException e) {
Viesti.virheilmo("Virhe kuvatiedoston " + kuvafile + "avaamisessa");
//e.printStackTrace();
}
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fis);
try {
origKuva = decoder.decodeAsBufferedImage();
} catch (IOException e) {
Viesti.virheilmo("Virhe luettaessa kuvaa " + kuvafile);
//e.printStackTrace();
} catch (ImageFormatException e) {
Viesti.virheilmo("Kuva " + kuvafile + " ei ole kelvollinen JPEG - kuva, eik� sit� voida k�sitell�");
}

try {
fis.close();
} catch (IOException e) {
Viesti.virheilmo("Virhe suljettaessa tiedostoa " + kuvafile);
//e.printStackTrace();
}

//luetaan kuvan koot muuttujiin
korkeus = origKuva.getHeight();
leveys = origKuva.getWidth();

Sori rikkinäiset skandit.

Mutta lyhyesti: kuva luetaan seuraavalla tavalla.

Koodia: [Valitse]
fis = new FileInputStream(kuvafile);
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fis);
origKuva = decoder.decodeAsBufferedImage();
fis.close();

ja koon lukeminen:

Koodia: [Valitse]
korkeus = origKuva.getHeight();
leveys = origKuva.getWidth();

r
« Viimeksi muokattu: 06.04.08 - klo:16.05 kirjoittanut Risto H. Kurppa »
UUSI UBUNTUN KÄYTTÄJÄ: SÄÄSTÄ AIKAASI LUKEMALLA  -> TÄMÄ <-