요구 사항:
2MB보다 큰 사진은 원본 이미지의 크기를 변경하지 않고 2MB 미만으로 압축해야 합니다.
(권장 튜토리얼: java 입문 튜토리얼)
종속성 소개:
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency>
첨부 엔터티 클래스:
@Builder @NoArgsConstructor @AllArgsConstructor @Data public class FileCO { /** * 附件字节流 */ private byte[] fileContent; /** * 附件OID */ private UUID attachmentOid; }
(권장 비디오 튜토리얼: java 비디오 튜토리얼)
이미지 엔터티 클래스:
@Builder @NoArgsConstructor @AllArgsConstructor @Data public class ImageInfo { /** * 图片字节流 */ private byte[] imageBytes; /** * 图片是否进行压缩 */ private Boolean compressFlag; /** * 图片宽度 */ private Integer width; /** * 图片高度 */ private Integer height; }
이미지 압축 도구:
@Slf4j public class ImageUtils { /** * 合法图片大小为2MB */ private static final Long LEGAL_IMAGE_SIZE = 1024 * 2L; /** * 图片压缩 当图片大小大于2MB进行等比例压缩 * 不修改图片尺寸进行压缩 * * @param fileCO * @return */ public static ImageInfo compressImageForScale(FileCO fileCO) throws IOException { byte[] imageBytes = fileCO.getFileContent(); UUID attachmentOid = fileCO.getAttachmentOid(); try { BufferedImage sourceImage = ImageIO.read(new ByteArrayInputStream(imageBytes)); //高度 int height = sourceImage.getHeight(); //宽度 int width = sourceImage.getWidth(); if (imageBytes.length <= 0 || imageBytes.length < LEGAL_IMAGE_SIZE * 1024) { return ImageInfo.builder() .imageBytes(imageBytes) .width(width) .height(height) .compressFlag(false) .build(); } long srcSize = imageBytes.length; double accuracy = getAccuracy(srcSize / 1024); while (imageBytes.length > LEGAL_IMAGE_SIZE * 1024) { ByteArrayInputStream inputStream = new ByteArrayInputStream(imageBytes); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(imageBytes.length); Thumbnails.of(inputStream) .scale(1f) .outputQuality(accuracy) .toOutputStream(outputStream); imageBytes = outputStream.toByteArray(); } log.info("【图片压缩】附件OID={} | 图片原大小={}kb | 压缩后大小={}kb", attachmentOid, srcSize / 1024, imageBytes.length / 1024); return ImageInfo.builder() .imageBytes(imageBytes) .width(width) .height(height) .compressFlag(true) .build(); } catch (Exception e) { log.error("【图片压缩】msg=图片压缩失败!", e); throw e; } } /** * 计算压缩精度 * * @param size * @return */ private static double getAccuracy(long size) { double accuracy; //图片大小小于4M,压缩精度为0.44;否则精度为0.4 if (size <= 2048 * 2) { accuracy = 0.44; } else { accuracy = 0.4; } return accuracy; } }
위 내용은 Java는 원본 이미지 크기를 변경하지 않고 압축된 이미지를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
