Vor kurzem brauche ich eine Bildkomprimierungsverarbeitung, um Projekte durchzuführen. Die meisten Methoden, die ich online gesucht habe, verwenden die JPegImageCoder -Klasse im Paket com.sun.image.codec.jpeg.*. Nachdem ich dieses Paket eingeführt habe, habe ich Fehler gemeldet. Verschiedene Google Baidu haben verschiedene Methoden ausprobiert, darunter manuell rt.jar in JRE, und die Änderung von API-Aufforderungen an die Zugriffsbeschränkungen von Fehler zu Warnung in Eclipse usw. sind jedoch nicht gut, da ich später festgestellt habe, dass es kein Com.sun.image gibt. Es scheint, dass diese Klasse in Java7 vollständig entfernt wurde, zumindest habe ich keine Version. Dann suchte ich nach einer alternativen Lösung, um die ImageIo -Klasse zur Verarbeitung zu verwenden. Der Code lautet wie folgt:
Es kann auf jede Größe, Hochaufnahme nach Komprimierung, ohne Verformung (Weißraum) komprimiert werden, der Suffixname kann geändert werden und die Komprimierungsauflösung kann geändert werden.
Vielleicht brauchen einige Freunde das auch. Bitte beachten Sie es. Wenn Sie Fragen haben, geben Sie mir bitte einige Beweise!
Paket cn.com.images; importieren java.awt.graphics; import Java.awt.image; Import Java.awt.image.BuffenedImage; Import Java.io.file; importieren java.io.ioException; import Java.math.bigdecimal; import Java.math.mathContext; Import Java.util.ArrayList; import Javax.imageo.imageo; /*** * Operation on Images * * @Author Chenzheng_java * @Since 2011/7/29 * */public class ImageHelper {private statische ImageHelper ImageHelper = null; public static imageHelper getImageHelper () {if (imageHelper == null) {imageHelper = new imageHelper (); } return ImageHelper; } / *** * skalieren Sie das Bild in der angegebenen Skala * * @param surceImagePath * Quelladresse * @param destinationPath * Adresse des Bildes Nach Ändern der Größe * @param -Skala * Skala, wie z. Bufferedimage bufferedimage; try {bufferedimage = imageio.read (Datei); int width = bufferedImage.getWidth (); int Höhe = bufferedImage.getheight (); width = parseDoubletoint (Breite * Skala); Höhe = ParseDouBletoint (Höhe * Skala); Image Image = bufferedImage.getScaledInstance (Breite, Höhe, Image.Scale_Smooth); Bufferedimage outputImage = new bufferedImage (Breite, Höhe, bufferedimage.type_int_rgb); Graphics Graphics = outputImage.getGraphics (); Graphics.Drawimage (Bild, 0, 0, null); Graphics.Disis (); ImageIo.Write (Ausgabe, Format, neue Datei (ZielPath)); } catch (ioException e) {System.out.println ("Der Fehler ist beim Komprimieren des Bildes aufgetreten"); E. printstacktrace (); }} / **** skalieren Sie das Bild in die angegebene Höhe oder Breite* @param screeImagePath -Bildquelle achten* @param Zielpathsadresse des Bildes Nach dem Komprimieren des Bildes* @Param Breitskala Breite* @Param Height Skala Höhe* @param auto, ob automatisch die ursprüngliche Höhe und das breite Verhältnis des Bildes des Bildungsabschnitts des Bildhöhes beibehalten. SourceImagePath, String ZielPath, int Breite, inthöhe, boolean auto, String -Format) {try {file file = new Datei (SourceImagePath); Bufferedimage bufferedimage = null; bufferedimage = imageio.read (Datei); if (auto) {ArrayList <Ganzzahl> paramsArrayList = getAutowidHandHeight (bufferedImage, width, Höhe); width = paramsArrayList.get (0); Höhe = paramsArrayList.get (1); System.out.println ("automatisch anpassen die Skala, width ="+width+"scaleImageWithParams-Methode, die beim Komprimieren von Bildern fehlerhaft ist"); E. printstacktrace (); }} / ** * Doppeltypdaten in int, Rundungsprinzip * * @param Sourcedouble * @return * / private statische int parseDouBletoint (Double Sourcedouble) {int result = 0; Ergebnis = (int) Sourcedouble; Rückgabeergebnis; } / ***** @param bufferedImage Das Bildobjekt, das skaliert werden soll ArrayList <Ganzzahl> ArrayList = new ArrayList <GearyReger> (); int width = bufferedImage.getWidth (); int Höhe = bufferedImage.getheight (); double scale_w = getDot2Decimal (width_scale, width); System.out.println ("getAutowidHandHandHeightScale_W ="+scale_w); double scaste_h = getDot2Decimal (height_scale, Höhe); if (scale_w <scale_h) {arrayList.add (parsedoubletoint (scale_w*width)); ArrayList.Add (parseDoubletoint (scale_w*Höhe)); } else {arrayList.add (parseDoubletoint (scale_h*width)); ArrayList.Add (parseDoubletoint (scale_h*Höhe)); } return arrayList; }/*** * Gibt die Darstellung der drei Dezimalpunkte der beiden Zahlen A/b * @param a * @param b * @return */public static double getDot2Decimal (int a, int b) {Bigdecimal bigDecimal_1 = neu BigDecimal (a); BigDecimal BigDecimal_2 = New BigDecimal (B); BigDecimal BigDecimal_Result = BigDecimal_1.Divide (BigDecimal_2, New MathContext (4)); Double Double1 = neues Double (BigDecimal_Result.toString ()); System.out.println ("The Double After Division ist:"+double1); double1 zurückgeben; }}