文档章节

不改变图片尺寸压缩图片,减少页面图片加载时间。

掌上流年
 掌上流年
发布于 2017/08/23 18:10
字数 570
阅读 17
收藏 0

    当做到上传图片的功能时,用户或许会上传一些超清的,很大的图片。那样显示到首页会耗费更多的时间来加载图片。这里写一篇关于保存图片尺寸并压缩图片的博客。不啰嗦了,直接上代码。

    首先将图片转为byte[ ]数组。

    这里是将图片转为byte[ ]数组的方法:

    //参数path为图片路径

  public static byte[] image2byte(String path) {
        byte[] data = null;
        FileImageInputStream input = null;
        try {
            input = new FileImageInputStream(new File(path));
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            int numBytesRead = 0;
            while ((numBytesRead = input.read(buf)) != -1) {
                output.write(buf, 0, numBytesRead);
            }
            data = output.toByteArray();
            output.close();
            input.close();
        } catch (FileNotFoundException ex1) {
            ex1.printStackTrace();
        } catch (IOException ex1) {
            ex1.printStackTrace();
        }
        return data;
    }

    然后减少图片的分辨率来达到压缩图片的功能

    //参数imageByte为byte[ ]图片,可用上面的方法获取

    //参数quality为将图片压缩到什么程度,quality越大图片占空间越大,越清晰。quality越小图片越模糊,占空间越小。(0.001~0.999之间),具体合适的区间自己可以测试下。

public static byte[] compressPic(byte[] imageByte, float quality) {
        byte[] inByte = null;
        try {
            ByteArrayInputStream byteInput = new ByteArrayInputStream(imageByte);
            Image img = ImageIO.read(byteInput);
            float newWidth = img.getWidth(null);
            float newHeight = img.getHeight(null);

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

            // 缩放图像
            BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D g = tag.createGraphics();
            g.drawImage(image, 0, 0, null); // 绘制缩小后的图
            g.dispose();
            ByteArrayOutputStream out = new ByteArrayOutputStream(imageByte.length);
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
            /* 压缩质量 */
            jep.setQuality(quality, true);
            encoder.encode(tag, jep);
            inByte = out.toByteArray();
            out.close();

        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return inByte;
    }

上述方法返回了一个压缩后的byte[ ]数组,这里将数组转回图片文件并保存。

//data参数为要转型的byte[ ]数组。

//path参数为转型后将图片保存到的位置,这里为路径。

public static void byte2image(byte[] data, String path) {
        if (data.length < 3 || path.equals(""))
            return;
        try {
            FileImageOutputStream imageOutput = new FileImageOutputStream(new File(path));
            imageOutput.write(data, 0, data.length);
            imageOutput.close();
            System.out.println("Make Picture success,Please find image in " + path);
        } catch (Exception ex) {
            System.out.println("Exception: " + ex);
            ex.printStackTrace();
        }
    }

    这样既可实现压缩功能,可以对比一下压缩前后所占空间。

    这里的quality貌似不是百分比压缩。

    目前此功能可能会繁琐些,我正在继续跟进学习,如有更好的方法会写到博客中,请继续跟进。若有更好的方法请留言给我。

© 著作权归作者所有

共有 人打赏支持
掌上流年
粉丝 5
博文 2
码字总数 1125
作品 0
伊春
程序员
提高网页的加载速度浅析

加快网页的加载速度,无疑是提高用户体验的一个很好的方法。但是这里我们如何提高网页的加载速度呢?这里我总结了几点。 当然,这也是我第一天上班来的第一个任务。。。 1、使用良好的结构 ...

hello菜bird
2016/08/09
53
0
如何提高网页的加载速度

加快网页的加载速度,无疑是提高用户体验的一个很好的方法。但是这里我们如何提高网页的加载速度呢?这里我总结了几点。 当然,这也是我第一天上班来的第一个任务。。。 1、使用良好的结构 ...

邪气小生
2016/07/14
87
0
HTML和CSS高级指南之一——性能与架构

本文由99根据Shay Howe的《An Adavnced Guide to HTML & CSS》第一课《Performance & Organization》所译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需...

石佛慈悲
2013/12/05
0
2
《前端之路》之 前端图片 类型 & 优化 & 预加载 & 懒加载 & 骨架屏

目录 前端图片 类型 & 优化 & 预加载 & 懒加载 & 骨架屏 前端图片 类型 & 优化 & 预加载 & 懒加载 & 骨架屏 一、 前端图片的类型 1.1、矢量图 和 位图 一般来说矢量图表示的是几何图形,文件...

SmallW
08/03
0
0
精简代码,为网站减负的十大建议

2013年,网页文件大小增加了32%,竟然达到了1.7Mb,包含96个独立HTTP请求。这只是一个平均数值,其中近一半的网站已经超过了这个数值。网站的过度臃肿正趋于流行,其中很大的责任在于Web开发...

勤奋的码农
2014/01/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
1
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
6
2
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
1
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
1
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部