java中图片压缩处理(java压缩图片大小)

本文目录一览:

java如何实现把一个大图片压缩到指定大小的图片且长宽比不变?

java要实现把一个大图片压缩到指定大小的图片且长宽比不变可以尝试以下操作:

建立一个AffineTransform

AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12)

转换矩阵,缩放比较简单(矩阵可以干很多事情,想做图像处理软件可以研究下)

[ x’] [ m00 m01 m02 ] [ x ] [ m00x + m01y + m02 ]

[ y’] = [ m10 m11 m12 ] [ y ] = [ m10x + m11y + m12 ]

[ 1 ] [ 0 0 1 ] [ 1 ] [ 1 ]

10倍比较难算(根号10啊,当然你想算也行),9倍好点(9的开方是3),m00为1/3,m01为0,m02为0,m10为0,m11为1/3,m12为0。

再建一个AffineTransformOp,把上面的转换传进去

AffineTransformOp(AffineTransform xform, int interpolationType)

最后调用AffineTransformOp的BufferedImage filter(BufferedImage src, BufferedImage dst) ,src传原图片,返回值就是想要的Image,注意是返回值,不是dst,不明白可以看下Java API

java如何实现把一个大图片压缩到指定大小的图片且长宽比不变

也就是图片压缩,可以不修改任何大小的压缩(速度快),也可等比例修改大小压缩(较慢)

下面这是一段等比例缩小图片的方法。

public String compressPic(String inputDir, String outputDir,

String inputFileName, String outputFileName, int width,

int height, boolean gp,String hzm) {

try {

if (!image.exists()) {

return “”;

}

Image img = ImageIO.read(image);

// 判断图片格式是否正确

if (img.getWidth(null) == -1) {

return “no”;

} else {

int newWidth; int newHeight;

// 判断是否是等比缩放

if (gp == true) {

// 为等比缩放计算输出的图片宽度及高度

double rate1 = ((double) img.getWidth(null)) / (double) width ;

double rate2 = ((double) img.getHeight(null)) / (double) height ;

// 根据缩放比率大的进行缩放控制

double rate = rate1 rate2 ? rate1 : rate2;

newWidth = (int) (((double) img.getWidth(null)) / rate);

newHeight = (int) (((double) img.getHeight(null)) / rate);

} else {

newWidth = img.getWidth(null); // 输出的图片宽度

newHeight = img.getHeight(null); // 输出的图片高度

}

BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);

/*

* Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的

* 优先级比速度高 生成的图片质量比较好 但速度慢

*/

Image im = img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);

tag.getGraphics().drawImage(im, 0, 0, null);

FileOutputStream out = new FileOutputStream(outputDir + outputFileName);

//JPEGImageEncoder可适用于其他图片类型的转换

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

encoder.encode(tag);

out.close();

}

} catch (IOException ex) {

ex.printStackTrace();

}

return “ok”;

}

求助java压缩图片存储大小的方法

 可以使用Draw这个类,通过改变像素来改变存储大小,实例如下:

public static boolean compressPic(String srcFilePath, String descFilePath) throws IOException {

        File file = null;

        BufferedImage src = null;

        FileOutputStream out = null;

        ImageWriter imgWrier;

        ImageWriteParam imgWriteParams;

        // 指定写图片的方式为 jpg

        imgWrier = ImageIO.getImageWritersByFormatName(“jpg”).next();

        imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(

                null);

        // 要使用压缩,必须指定压缩方式为MODE_EXPLICIT

        imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);

        // 这里指定压缩的程度,参数qality是取值0~1范围内,

        imgWriteParams.setCompressionQuality((float) 1);

        imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);

        ColorModel colorModel =ImageIO.read(new File(srcFilePath)).getColorModel();// ColorModel.getRGBdefault();

        // 指定压缩时使用的色彩模式

//        imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(

//                colorModel, colorModel.createCompatibleSampleModel(16, 16)));

        imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(

                colorModel, colorModel.createCompatibleSampleModel(16, 16)));

        try {

            if (isBlank(srcFilePath)) {

                return false;

            } else {

                file = new File(srcFilePath);System.out.println(file.length());

                src = ImageIO.read(file);

                out = new FileOutputStream(descFilePath);

                imgWrier.reset();

                // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何

                // OutputStream构造

                imgWrier.setOutput(ImageIO.createImageOutputStream(out));

                // 调用write方法,就可以向输入流写图片

                imgWrier.write(null, new IIOImage(src, null, null),

                        imgWriteParams);

                out.flush();

                out.close();

            }

        } catch (Exception e) {

            e.printStackTrace();

            return false;

        }

        return true;

    }

public static boolean isBlank(String string) {

        if (string == null || string.length() == 0 || string.trim().equals(“”)) {

            return true;

        }

        return false;

    }

如何用java 调整jepg图片压缩

ImageWriter writer; // 自己获取 ImageWriter 对象

ImageWriteParam iwp = writer.getDefaultWriteParam();

iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);

// 参数为0和1

// 1表示设置最小的压缩以保持最大的图片质量

iwp.setCompressionQuality(1);

File file = new File(OUTPUTFILE);

FileImageOutputStream output = new FileImageOutputStream(file);

writer.setOutput(output);

IIOImage image = new IIOImage(BUFFEREDIMAGE, null, null);

// 写入图片

writer.write(null, image, iwp);

writer.dispose()

问了一下我远标教育的哥们,希望对你有用!

原创文章,作者:EGNO,如若转载,请注明出处:https://www.506064.com/n/143566.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
EGNOEGNO
上一篇 2024-10-22 23:34
下一篇 2024-10-22 23:34

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • 用Python绘制酷炫图片

    在本篇文章中,我们将展示如何使用Python绘制酷炫的图片。 一、安装Python绘图库 在使用Python绘制图片之前,我们需要先安装Python绘图库。Python有很多绘图库…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29

发表回复

登录后才能评论