Récemment, j'ai besoin d'un traitement de compression d'image pour faire des projets. La plupart des méthodes que j'ai recherchées en ligne utilisent la classe jpegimageencoder dans le package com.sun.image.codec.jpeg. *. Après avoir introduit ce package, j'ai signalé des erreurs. Divers Google Baidu ont essayé diverses méthodes, y compris manuellement Rt.Jar dans JRE, et modifiant les invites d'API restreintes sur l'accès de l'erreur à l'avertissement dans Eclipse, etc. Cependant, ce ne sont pas bons, car plus tard j'ai trouvé qu'il n'y a pas de com.sun.image. * Dans Rt.jar dans Java-7-Openjdk-Amd64. Il semble que cette classe ait été complètement supprimée dans Java7, au moins je n'ai pas de version. Ensuite, j'ai recherché une solution alternative pour utiliser la classe ImageIo pour le traitement, le code est le suivant:
Il peut être comprimé à n'importe quelle taille, haute définition après compression, sans déformation (espace blanc), le nom du suffixe peut être modifié et la résolution de compression peut être modifiée.
Peut-être que certains amis en ont également besoin. Veuillez vous y référer. Si vous avez des questions, donnez-moi quelques preuves!
package cn.com.images; import java.awt.graphics; import java.awt.image; Importer java.awt.image.bufferedImage; Importer java.io.file; Importer java.io.ioException; import java.math.bigdecimal; import java.math.mathContext; import java.util.arraylist; import javax.imageio.imageio; / *** * Opération sur les images * * @author Chenzheng_java * @Since 2011/7/29 * * / public class ImageHelper {private static ImageHelper ImageHelper = null; public static imagehelper getImageHelper () {if (imageHelper == null) {imageHelper = new ImageHelper (); } return ImageHelper; } / *** * Échelle l'image à l'échelle spécifiée * * @param sourceImagePath * Adresse source * @param DestinationPath * Adresse de l'image après avoir modifié la taille * @param échelle * Scale, telle que 1.2 * / public static void ScaleImage (String SourceMagePath, String DestinationPath, double échelle, String Format) {fichier file = nouveau fichier (SourceMagePath); BufferedImage BufferedImage; try {bufferedImage = imageo.read (fichier); int width = bufferedImage.getWidth (); int height = bufferedImage.getheight (); largeur = parsedoubleToint (largeur * échelle); hauteur = parsedoubletoint (hauteur * échelle); Image image = bufferedImage.getScaledInstance (largeur, hauteur, image.scale_smooth); BufferedImage OutputImage = new BufferedImage (largeur, hauteur, tampondImage.type_int_rgb); Graphiques graphiques = outputImage.getGraphics (); graphics.DrawImage (image, 0, 0, null); graphics.dispose (); ImageIo.Write (OutputImage, Format, nouveau fichier (DestinationPath)); } catch (ioException e) {System.out.println ("L'erreur s'est produite lors de la compression de l'image"); e.printStackTrace (); }} / *** * Échec de l'image à la hauteur ou à la largeur spécifiée * @param SourceImagePath Image Adresse source * @param DestinationPath Adresse de l'image après compression de l'image * @param largeur Largeur de l'échelle * @param hauteur de hauteur Hauteur * @param auto SourceImagePath, String DestinationPath, int width, int height, boolean auto, string format) {try {file file = new File (sourceImagePath); BufferedImage BufferedImage = NULL; BufferedImage = imageo.read (fichier); if (auto) {ArrayList <Integer> paramsArrayList = getAutowidthandHeight (tamponedImage, width, height); width = paramsArrayList.get (0); height = paramsArrayList.get (1); System.out.println ("Adjuster automatiquement l'échelle, width =" + width + "ScaleImageWithParams Méthode erronée lors de la compression d'images"); e.printStackTrace (); }} / ** * Convertir les données de double type en principe INT, arrondissement * * @param Sourcedouble * @return * / private static int parsedoubleToint (double sourcedouble) {int result = 0; Résultat = (int) Sourcedouble; Résultat de retour; } / *** * * @param BufferedImage L'objet d'image à échelle * @param width_scale Largeur pour évoluer vers * @param height_scale hauteur à évoluer pour * @return une collection> Le premier élément est la largeur et le deuxième élément est la hauteur * / private static ArrayList ArrayList <Integer> ArrayList = new ArrayList <Integer> (); int width = bufferedImage.getWidth (); int height = bufferedImage.getheight (); double échelle_w = getDOT2DecImal (width_scale, width); System.out.println ("GetAutowidThandHeightScale_W =" + Scale_W); double échelle_h = getDOT2DecImal (height_scale, hauteur); if (Scale_W <Scale_H) {ArrayList.add (PARSEDOUBLETOInT (Scale_W * Width)); ArrayList.Add (ParsedoubleToint (Scale_W * Height)); } else {arrayList.add (parsedoubleToint (large_h * width)); ArrayList.Add (ParsedoubleToint (Scale_H * Height)); } return arrayList; } / *** * Renvoie la représentation des trois points décimaux des deux nombres a / b * @param a * @param b * @return * / public static double getDot2Decimal (int a, int b) {bigdecimal bigdecimal_1 = new BigDecimal (a); Bigdecimal bigdecimal_2 = nouveau bigdecimal (b); Bigdecimal bigdecimal_result = bigdecimal_1.divide (bigdecimal_2, new MathContext (4)); Double double1 = new double (bigdecimal_result.toString ()); System.out.println ("Le double après la division est:" + double1); Retour Double1; }}