当前位置:首页 > 代码 > 正文

java压缩图片代码(java对图片进行压缩)

admin 发布:2022-12-19 18:16 153


今天给各位分享java压缩图片代码的知识,其中也会对java对图片进行压缩进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

JAVA与图像压缩

此篇转载。

----------------------------------------------------------------------

下面是一段给图片加上网站logo的代码,注意第12,13,14行设置了图片的压缩比。本例为不压缩原图片。

java 代码

BufferedImage image = ImageIO.read(new FileInputStream("c:\\base.jpg"));

//读取图标

BufferedImage image_biao = ImageIO.read(new FileInputStream(

"c:\\logo.gif"));

Graphics2D g = image.createGraphics();

g.drawImage(image_biao, 10, 10, image_biao.getWidth(null),

image_biao.getHeight(null), null);

g.dispose();

FileOutputStream out = new FileOutputStream("c:\\out.jpg");

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);

param.setQuality(1f, false);

encoder.setJPEGEncodeParam(param);

encoder.encode(image);

out.close();

setQuality

public void setQuality(float quality, boolean forceBaseline)

quality取值在 1.0 到 0.0 之间

Some guidelines: 0.75 high quality 0.5 medium quality 0.25 low quality

另外要得到一张指定高度和宽度的图片的话可以用以下代码:(接上面代码)

java 代码

BufferedImage tag = new BufferedImage(500, 300,image.getType());

tag.getGraphics().drawImage(image, 0, 0, 500, 300, null); //绘制缩小后的图

FileOutputStream out2 = new FileOutputStream("c:\\out2.jpg");

JPEGImageEncoder encoder2 = JPEGCodec.createJPEGEncoder(out2);

JPEGEncodeParam param2 = encoder.getDefaultJPEGEncodeParam(tag);

param2.setQuality(1f, false);

encoder2.setJPEGEncodeParam(param2);

encoder2.encode(tag);

out2.close();

注意第一行新建 BufferedImage 的时候要使用原图片的type,这样可以保证输出与原图片相同质量的图片。

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压缩图片代码和java对图片进行压缩的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/17029.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载