[JAVA] ImageOutputStream error bij JAR file

Pagina: 1
Acties:

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 06-05 17:50
Hoi Allen,

Wanneer ik mijn JAVA applet online zet krijg ik bij het roteren van mijn images een error.
Namelijk deze
code:
1
sun.misc.ServiceConfigurationError: javax.imageio.spi.ImageOutputStreamSpi: http://www.aroundtheglobe.nl/eupload/META-INF/services/javax.imageio.spi.ImageOutputStreamSpi:1: Illegal configuration-file syntax


Op mn pc waarop ik de code gemaakt heb, werkt het programma wel gewoon volledig.
De vraag is dan ook waarom het wel lokaal werkt en niet wanneer ik mn code verpak in een JAR file en op internet zet. Wat ik op internet vond was dat het probleem zat in
ImageOutputStream out = ImageIO.createImageOutputStream( theTargetFile ); omdat deze classe gebruik zou maken van sun classes welke een bug bevatte.

Uiteraard is de JAR gesigned e.d.

Hieronder de methode waarop het mis gaat.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    /*
     * Afbeelding roteren, per keer 90 graden naar rechts.
     */
    public File rotateImage(File rFile) throws IOException
    {
        BufferedImage targetImage,sourceImage;
        File theTargetFile = File.createTempFile(rFile.getName(), ".jpg");

        //File object omzetten naar BufferedImage.
        FileInputStream in = new FileInputStream(rFile.getAbsolutePath());
        JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
        sourceImage = decoder.decodeAsBufferedImage();
        in.close();

        //BufferedImage kwartslag draaien en de hoogstmogelijke kwaliteit behouden.
        AffineTransform afRight = AffineTransform.getRotateInstance(Math.toRadians(90));
        afRight.translate(0,sourceImage.getHeight() * -1);
        AffineTransformOp rOp = new AffineTransformOp(afRight,AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
        targetImage = rOp.filter(sourceImage, null);

        // BufferedImage terugschrijven naar File Object
       //Hier gaat het mis!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        ImageOutputStream out = ImageIO.createImageOutputStream( theTargetFile );
        ImageWriter theWriter = (ImageWriter)ImageIO.getImageWritersBySuffix("jpg").next();
        theWriter.setOutput( out );
    
        theWriter.write(targetImage);
        
        out.close();
       
        theTargetFile.deleteOnExit();
        return theTargetFile;
    }


Welke work around stellen jullie voor of welke oplossing met deze code? Input en returnwaarde moeten van het object file blijven.


Alvast bedankt

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 06-05 17:50
Oplossing:

vervang
code:
1
2
3
4
5
6
7
        ImageOutputStream out = ImageIO.createImageOutputStream( theTargetFile );
        ImageWriter theWriter = (ImageWriter)ImageIO.getImageWritersBySuffix("jpg").next();
        theWriter.setOutput( out );
    
        theWriter.write(targetImage);
        
        out.close();


door

code:
1
2
3
4
5
6
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(theTargetFile));
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(targetImage);
        param.setQuality(1.0f, false);  // max quality
        encoder.setJPEGEncodeParam(param);
        encoder.encode(targetImage);