2010-12-09 31 views
2

J'ai reçu le code suivant, et Eclipse l'a marqué (sur la ligne JPEGImageEncoder) comme une erreur (restriction d'accès). J'ai changé les options Eclipse pour compiler ce code, mais j'ai lu que l'erreur signifie que cette classe (JPEGImageEncoder) peut ne pas être implémentée par une implémentation JRE (pas une implémentation Sun/Oracle). Donc, quel devrait être le code qui n'aurait pas de restrictions d'accès, c'est-à-dire un code complètement sûr pour faire la même chose (créer une image JPG)?Création de fichiers JPEG: conversion du code d'accès restreint (JPEGImageEncoder) en code "sécurisé"

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(filename)); 
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out); 
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(buffImage); 
param.setQuality(0.8f, false); 
encoder.encode(buffImage, param); 

Répondre

3

Peut-être que je l'ai mal compris, mais si tout ce que vous cherchez à faire est de sauver un objet BufferedImage comme jpeg, vous pouvez le faire (à partir de Java 1.4 et suivantes):

ImageIO.write(bufferedImage,"jpg",file); 

Voilà un lien avec plus d'informations: http://download.oracle.com/javase/tutorial/2d/images/saveimage.html

Comme vous pouvez le voir, il est dit que JPEG, PNG, GIF, BMP et WBMP seront toujours supportés.

Si vous voulez régler la compression/qualité, c'est un peu plus de travail mais pas trop. En supposant que vous avez un BufferedImage et un outFile:

IIOImage outputImage = new IIOImage(bufferedImage, null, null); 

ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next();   
writer.setOutput(new FileImageOutputStream(outFile)); 
ImageWriteParam writeParam = writer.getDefaultWriteParam(); 
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
writeParam.setCompressionQuality(.75f); // float between 0 and 1, 1 for max quality. 
writer.write(null, outputImage, writeParam); 

(fixe de réponse précédente)

+0

J'ai ajouté quelques lignes plus. J'ai besoin de définir la qualité jpg aussi. Est-ce que ImageIO peut le faire? – cdarwin

+0

Bon point. J'ai mis à jour la réponse pour montrer comment régler la compression jpeg. – Alastair