java压缩图片至指定大小,java压缩图片大小
需求:
大于2MB的图片需要压缩到2MB以下,且不改变原图的尺寸。
(推荐教程:java入门教程)
引入依赖:
属国
groupIdnet.coobird/groupId
artifactId缩略图/artifactId
版本0 .4 .8/版本
/依赖关系附件实体类:
@Builder
@NoArgsConstructor
@AllArgsConstructor
@数据
公共类FileCO
/**
* 附件字节流
*/
私有字节[]文件内容;
/**
* 附件似…的
*/
二等兵UUID附件oid
}(视频教程推荐:java视频教程)
图片实体类:
@Builder
@NoArgsConstructor
@AllArgsConstructor
@数据
公共类图像信息{
/**
* 图片字节流
*/
私有字节[]图像字节;
/**
* 图片是否进行压缩
*/
私有布尔压缩标志
/**
* 图片宽度
*/
私有整数宽度;
/**
* 图片高度
*/
私有整数高度;
}图片压缩工具类:
@Slf4j
公共类ImageUtils {
/**
* 合法图片大小为2MB
*/
私有静态最终long LEGAL _ IMAGE _ SIZE=1024 * 2L;
/**
* 图片压缩当图片大小大于2MB进行等比例压缩
* 不修改图片尺寸进行压缩
*
* @param fileCO
* @返回
*/
公共静态ImageInfo compressImageForScale(FileCO FileCO)引发IOException {
byte[]图像字节=fileco。getfile content();
UUID附件oid=fileco。getattachmentoid();
尝试{
缓冲图像源image=imageio。read(新bytearrayiputstream(图像字节));
//高度
int height=源图像。获取height();
//宽度
int width=源图像。getwidth();
如果(图像字节。长度=0 图像字节。length LEGAL _ IMAGE _ SIZE * 1024){
返回ImageInfo.builder()。图像字节(图像字节)。宽度(宽度)。高度(高度)。压缩标志(假)。build();
}
长src大小=图像字节。长度;
双精度=获取精度(src大小/1024);
而(图像字节。length LEGAL _ IMAGE _ SIZE * 1024){
bytearray inputStream inputStream=new bytearray inputStream(图像字节);
ByteArrayOutputStream输出流=新的ByteArrayOutputStream(图像字节。长度);
缩略图(输入流)。刻度(1f)。输出质量(准确性)。输出流(输出流);
图像字节=输出流。tobytearray();
}
log.info(【图片压缩】附件OID={} 图片原大小={}kb 压缩后大小={}kb ,
attachmentOid,srcSize/1024,图像字节。长度/1024);
返回ImageInfo.builder()。图像字节(图像字节)。宽度(宽度)。高度(高度)。压缩标志(真)。build();
} catch(异常e) {
log.error(【图片压缩】msg=图片压缩失败!,e);
扔e;
}
}
/**
* 计算压缩精度
*
* @param size
* @返回
*/
私有静态双精度(长尺寸){
双倍精度;
//图片大小小于4M,压缩精度为0.44;否则精度为0.4
if (size=2048 * 2) {
准确度=0.44;
}否则{
精度=0.4;
}
返回精度;
}
}以上就是爪哇岛实现压缩图片且不改变原图尺寸的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。