최근에 프로젝트를 수행하려면 이미지 압축 처리가 필요합니다. 내가 검색 한 대부분의 메소드는 온라인에서 패키지에서 jpegimageencoder 클래스를 사용합니다. com.sun.image.codec.jpeg.*. 이 패키지를 소개 한 후 오류를보고했습니다. 다양한 Google Baidu는 JRE의 수동 Rt.jar 및 액세스 제한 API 프롬프트를 오류에서 Eclipse 등으로 변경하는 등 다양한 방법을 시도했습니다. 이 클래스는 Java7에서 완전히 제거 된 것 같습니다. 적어도 버전이 없습니다. 그런 다음 처리를 위해 imageio 클래스를 사용하는 대체 솔루션을 검색했습니다. 코드는 다음과 같습니다.
압축 후 고화질, 변형없이 (공백), 접미사 이름을 변경할 수 있으며 압축 해상도를 수정할 수 있습니다.
어쩌면 일부 친구들도 이것을 필요로 할 것입니다. 참조하십시오. 질문이 있으시면 증거를 알려주세요!
패키지 cn.com.images; java.awt.graphics 가져 오기; import java.awt.image; java.awt.image.bufferedimage import; import java.io.file; import java.io.ioexception; import java.math.bigdecimal; Java.Math.MathContext 가져 오기; java.util.arraylist 가져 오기; import javax.imageio.imageio; /*** * 이미지에서의 작동 * * @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; } / *** * 지정된 스케일로 이미지를 스케일링 * * @param sourceImagePath * 소스 주소 * @Param DestinationPath * 크기를 변경 한 후 이미지 주소 * @param scale * scale * / public static void scaleimage (String SourceImagePath, String DestinationPath, 이중 스케일, 문자열 파일) {SourceImagePath); BufferedImage BufferedImage; {bufferedImage = imageio.read (file); int width = bufferedImage.getWidth (); int height = bufferedImage.getheight (); 너비 = parsedouBletoint (너비 * 스케일); 높이 = parsedouBletoint (높이 * 스케일); 이미지 이미지 = BufferedImage.getScaledInstance (너비, 높이, 이미지 .Scale_smooth); BufferedImage outputImage = New BufferedImage (너비, 높이, BufferedImage.type_int_rgb); 그래픽 그래픽 = outputimage.getGraphics (); Graphics.DrawImage (image, 0, 0, null); 그래픽 .dispose (); imageio.write (outputImage, format, 새 파일 (대상 경로)); } catch (ioException e) {System.out.println ( "이미지를 압축하는 동안 오류가 발생했습니다"); e.printstacktrace (); }} / **** 이미지를 지정된 높이 또는 너비로 스케일링하십시오* @param sourceImagepath 이미지 소스 주소* @param 대상 경로 이미지의 @param 너비 스케일 너비* @param 높이 스케일 높이* @param auto 이미지의 원래 높이 및 너비를 자동으로 유지할 것인지* @param format 형식과 같은 @param void void void void withate format을 자동으로 유지 해야하는지 여부 SourceImagePath, 문자열 대상 경로, int 너비, int 높이, 부울 자동, 문자열 형식) {try {file file = 새 파일 (sourceImagePath); BufferedImage bufferedImage = null; bufferedImage = imageio.Read (파일); if (auto) {arraylist <integer> paramsarraylist = getautowidthandheight (bufferedImage, 너비, 높이); 너비 = ParamsArrayList.get (0); 높이 = ParamsArrayList.get (1); System.out.println ( "스케일을 자동 조정, 너비 ="+width+"scaleimagewithparams 메소드 이미지를 압축 할 때 오류가 오류"); e.printstacktrace (); }} / ** * 이중 유형 데이터 변환 int, 반올림 원리 * * @param sourcedouble * / private static int parsedoubleToint (double sourcedouble) {int result = 0; 결과 = (int) sourcedouble; 반환 결과; } / ***** @param bufferedImage 스케일링 할 이미지 객체* @param width_scale 너비는* @param height_scale 높이* @param height_scale 높이를 컬렉션으로 스케일로 스케일로 스케일로 스케일로, 첫 번째 요소는 높이* / private arraylist입니다. height_scale) {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, height); 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; }/*** * 두 숫자의 세 가지 십진 점 표현을 반환합니다. bigdecimal bigdecimal_2 = 새로운 bigdecimal (b); bigdecimal bigdecimal_result = bigdecimal_1.divide (bigdecimal_2, new MathContext (4)); double double1 = new double (bigdecimal_result.toString ()); System.out.println ( "두 번 이후의 이중은 다음과 같습니다."+double1); 복귀 더블 1; }}