# Alternative zu import com.sun.image.codec.jpeg.JPEGCodec ?



## el_vital (15. Feb 2009)

Hallo,

ich möchte ein Image oder BufferedImage als JPEG mit einer Bestimmten Auflösung (in DPI) abspeichern. Diese Informationen stehen ja in den EXIF Daten. In ImageIO gibt es keine Funktion um die Auflösung zu verändern. Jetzt schreibe ich erst das Bild mit ImageIO, dann lese ich die EXIF Daten aus und speichere das Bild mit geänderten Auflösungseintrag erneut ab. Das Funktioniert zwar, aber beim kompilieren kommt die Warnung: 
warning: com.sun.image.codec.jpeg.JPEGCodec is Sun proprietary API and may be removed in a future release

deswegen würde ich von com.sun. Sachen gerne Abstand halten. Aber ich finde einfach keine andere Möglichkeit um die Auflösung in den EXIF-Daten zu ändern.

Hier ist mein bisherige Code:





```
try {
      File ffile = new File(fd.getDirectory() + File.separator + fd.getFile());
      try {
            ImageIO.write((RenderedImage) ImgTemp, "jpg", ffile);
            } catch (IOException ex) {
            System.out.println("Bild schreiben funtkioniert nicht");
            Logger.getLogger(Passbild.class.getName()).log(Level.SEVERE, null, ex);
            }

       ImageReader reader = ImageIO.getImageReadersByFormatName("jpeg").next();
       reader.setInput(new FileImageInputStream(ffile), true, false);
       IIOMetadata data = reader.getImageMetadata(0);

       BufferedImage output = toBufferedImage(ImgTemp, BufferedImage.TYPE_INT_RGB);
       Element tree = (Element) data.getAsTree("javax_imageio_jpeg_image_1.0");
       Element jfif = (Element) tree.getElementsByTagName("app0JFIF").item(0);

       for (int i = 0; i < jfif.getAttributes().getLength(); i++) 
      {
           Node attribute = jfif.getAttributes().item(i);
           System.out.println(attribute.getNodeName() + "=" + attribute.getNodeValue());
       }
       
       FileOutputStream fos = new FileOutputStream(ffile);
       JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(fos);
       JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(output);
       jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
       jpegEncodeParam.setXDensity(300);
       jpegEncodeParam.setYDensity(300);
       jpegEncoder.encode(output, jpegEncodeParam);
       fos.close();
```


----------



## Marco13 (15. Feb 2009)

Könnte ein bißchen komplizierter sein - schau mal auf http://java.sun.com/javase/6/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html und sag' bescheid, wenn's nicht klappt.


----------

