Je dois enregistrer une image jpeg sans perte. Je travaille sur un projet de stéganographie mais Java compresse et sauvegarde mon résultat. Je fais des recherches sur tous les forums et j'essaie tout mais ça n'a pas marché.Comment enregistrer jpg sans perte dans Java?
Voici mon exemple de code pour enregistrer une image sans perte jpeg:
BufferedImage image = ImageIO.read(new File("sources/image.jpg"));
ImageWriter writer = ImageIO.getImageWritersByFormatName("JPEG").next();
JPEGImageWriteParam jpegParams = new JPEGImageWriteParam(null);
jpegParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
jpegParams.setCompressionQuality(1f);
writer.setOutput(ImageIO.createImageOutputStream(new File("example.jpg")));
writer.write(null, new IIOImage(image,null,null), jpegParams);
writer.dispose();
Après ce processus je calcule la valeur PSNR est 28,53173 et "example.jpg « taille de est plus grand que » image.jpg ".
J'essaie d'importer la bibliothèque JAI mais je ne suis pas sûr que Java 8 supporte JAI.
Pouvez-vous partager plus de détails sur votre algorithme afin que nous puissions comprendre pourquoi votre jpeg doit être sans perte? Il se peut que jpeg ne soit pas le bon format pour votre algorithme, ou que vous deviez encoder votre image stego d'une manière spécifique. Lisez [ici] (https://stackoverflow.com/questions/29677726/steganography-in-lossy-compression-java/29678676#29678676) pour un exemple. – Reti43
Tout d'abord merci pour votre réponse. Mon algorithme est très simple. Texte/image à binaire, lire l'image de couverture, RGB à YCbCr, séparer 8x8 blocs pour l'espace Y, DCT pour tous les blocs, et que le réglage LSB du coefficient maximum de la fréquence moyenne. Après tout IDCT, YCbCr à RGB et enregistrer. Je dois le faire dans l'application Android et je dois lire JPEG écrire JPEG. – vakkaya
Avez-vous basé votre algorithme sur une publication que vous pouvez nous montrer? Si vous lisez un fichier JPEG, vous n'avez pas besoin de reconstruire les pixels à partir des données du fichier. Chargez simplement les blocs DCT dans la mémoire, modifiez-les selon votre algorithme, puis réencodez-les dans le fichier de sortie. De cette façon, vous évitez toutes les choses avec perte du format JPEG, ce qui implique les étapes de transformation et de quantification. – Reti43