Недавно мне нужна обработка сжатия изображений для выполнения проектов. Большинство методов, которые я искал онлайн, используют класс jpegimageencoder в пакете com.sun.image.codec.jpeg.*. После введения этого пакета я сообщил об ошибках. Различные Google Baidu пробовали различные методы, в том числе вручную rt.jar в JRE и изменение подсказок API с ограниченным доступом от ошибки к предупреждению в затмении и т. Д. Однако это не очень хорошо, потому что позже я обнаружил, что нет com.sun.image.* В Rt.jar в Java-7-openjdk-amd64. Кажется, что этот класс был полностью удален в Java7, по крайней мере, у меня нет версии. Затем я искал альтернативное решение для использования класса Imageio для обработки, код заключается в следующем:
Он может быть сжат до любого размера, высокого определения после сжатия, без деформации (белое пространство), имя суффикса может быть изменено, и разрешение сжатия может быть изменено.
Может быть, некоторым друзьям тоже это нужно. Пожалуйста, обратитесь к этому. Если у вас есть какие -либо вопросы, пожалуйста, дайте мне некоторые доказательства!
пакет cn.com.images; импортировать java.awt.graphics; импортировать java.awt.image; Импорт java.awt.image.bufferedImage; Импорт java.io.file; импортировать java.io.ioexception; импортировать java.math.bigdecimal; Импорт java.math.mathcontext; импортировать java.util.arraylist; Импорт javax.imageio.imageio; /*** * Операция на изображениях * * @author chenzheng_java * @since 2011/7/29 * */public class ImageHelper {Private Static ImageHelper ImageHelper = null; public StaticeHelper getImageHelper () {if (imageHelper == null) {imageHelper = new ImageHelper (); } вернуть изображение Hhelper; } / *** * Шкала изображения в указанной шкале * * @param SourceImagePath * Адрес источника * @param destinationpath * Адрес изображения после изменения размера * @param Scale * Scale *, например, 1.2 * / public static void ScaleMage (String SourceImagePath, String DestinationPath, Double Scale Format) {file = new File (SourceImagePath); BufferedImage BufferedImage; try {bufferemage = imageio.read (file); int width = bufferedimage.getwidth (); int height = bufferedimage.getheight (); ширина = parsedoubletoint (ширина * Scale); высота = parsedoubletoint (высота * шкала); Image Image = bufferedImage.getScalEdinStance (ширина, высота, image.scale_smooth); BufferedImage outputImage = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); Graphics Graphics = outputImage.getGraphics (); graphics.drawimage (image, 0, 0, null); graphics.dispose (); ImageIo.Write (outputImage, format, новый файл (destinationPath)); } catch (ioException e) {System.out.println («Ошибка произошла при сжатии изображения»); e.printstacktrace (); }} / **** Шкалы изображения на указанную высоту или ширину* @param sourceImagePath Изображение Адрес источника изображения* @param destinationpath Адрес изображения после сжатия изображения* @param Ширина ширины ширины* @param Высота высоты* @param Авто, чтобы автоматически поддерживать исходную высоту и ширину. SourceImagePath, String DestinationPath, int width, int height, boolean auto, string format) {try {file file = new file (sourceimagepath); BufferedImage BufferedImage = null; BufferedImage = imageio.read (файл); if (auto) {arraylist <Integer> paramsarraylist = getautowidthandheight (bufferedimage, width, height); width = paramsarraylist.get (0); высота = paramsarraylist.get (1); System.out.println ("Автофрагарная масштаба, ширина ="+width+"scaleimagewithparams Метод ошибочно, при сжатии изображений"); e.printstacktrace (); }} / ** * Преобразовать данные двойного типа в Int, принцип округления * * @param sourcebuble * @return * / private static int parsedoubletoint (двойной источник) {int result = 0; Результат = (int) источника; результат возврата; } / ****** @param BufferedImage объект изображения, который будет масштабирован* @param width_scale ширина, чтобы масштабировать до* @param height_scale height, чтобы масштабировать до* @return a collect ArrayList <Integer> arraylist = new ArrayList <Integer> (); int width = bufferedimage.getwidth (); int height = bufferedimage.getheight (); double scale_w = getDot2decimal (width_scale, width); System.out.println ("getautowiDthandHeightScale_W ="+scale_w); Double Scale_h = getDot2decimal (height_scale, высота); if (scale_w <scale_h) {arraylist.add (parsedoubletoint (scale_w*width)); arraylist.add (parsedoubletoint (scale_w*height)); } else {arraylist.add (parsedoubletoint (scale_h*width)); arraylist.add (parsedoubletoint (scale_h*height)); } return ArrayList; }/*** * вернуть представление трех десятичных точек двух чисел a/b * @param a * @param b * @return */public static doubledot2decimal (int a, int b) {bigdecimal bigdecimal_1 = new bigdecimal (a); BigDecimal BigDecimal_2 = новый BigDecimal (B); Bigdecimal bigdecimal_result = bigdecimal_1.divide (bigdecimal_2, new MathContext (4)); Double1 = новый двойник (bigdecimal_result.tostring ()); System.out.println («двойное подразделение после:»+double1); вернуть Double1; }}