Imagen de compresión de igual proporción de Java

Imagen de compresión de igual proporción de Java

	public static void main(String[] args) throws Exception {
		byte[] bytes = FileUtils.readFileToByteArray(new File("D:\\1.jpg"));
		long l = System.currentTimeMillis();
		bytes = Test.compressPicForScale(bytes, 2000, "x");// 图片小于2M
		System.out.println(System.currentTimeMillis() - l);
		FileUtils.writeByteArrayToFile(new File("D:\\dd1.jpg"), bytes);

	}
    /**
     * 根据指定大小压缩图片
     *
     * @param imageBytes  源图片字节数组
     * @param desFileSize 指定图片大小,单位kb
     * @param imageId     影像编号
     * @return 压缩质量后的图片字节数组
     */
    public static byte[] compressPicForScale(byte[] imageBytes, long desFileSize, String imageId) {
        if (imageBytes == null || imageBytes.length <= 0 || imageBytes.length < desFileSize * 1024) {
            return imageBytes;
        }
        long srcSize = imageBytes.length;
        double accuracy = getAccuracy(srcSize / 1024);
        try {
            while (imageBytes.length > desFileSize * 1024) {
                ByteArrayInputStream inputStream = new ByteArrayInputStream(imageBytes);
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream(imageBytes.length);
                Thumbnails.of(inputStream)
                        .scale(accuracy)
                        .outputQuality(accuracy)
                        .toOutputStream(outputStream);
                imageBytes = outputStream.toByteArray();
            }
            //logger.info("【图片压缩】imageId={} | 图片原大小={}kb | 压缩后大小={}kb",
            //        imageId, srcSize / 1024, imageBytes.length / 1024);
        } catch (Exception e) {
            //logger.error("【图片压缩】msg=图片压缩失败!", e);
        }
        return imageBytes;
    }
    
    
    /**
     * 自动调节精度(经验数值)
     *
     * @param size 源图片大小
     * @return 图片压缩质量比
     */
    private static double getAccuracy(long size) {
        double accuracy;
        if (size < 900) {
            accuracy = 0.85;
        } else if (size < 2047) {
            accuracy = 0.6;
        } else if (size < 3275) {
            accuracy = 0.44;
        } else {
            accuracy = 0.4;
        }
        return accuracy;
    }
//需要引入jar包
//	<!-- 谷歌图片压缩 -->
//	<dependency>
//		<groupId>net.coobird</groupId>
//		<artifactId>thumbnailator</artifactId>
//		<version>0.4.14</version>
//	</dependency>

Supongo que te gusta

Origin blog.csdn.net/woshiabc111/article/details/119564696
Recomendado
Clasificación