国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java 實現(xiàn)圖片壓縮的兩種方法

Java 實現(xiàn)圖片壓縮的兩種方法

2020-09-12 00:24Nemo Java教程

這篇文章主要介紹了Java 實現(xiàn)圖片壓縮的兩種方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下

問題背景。

典型的情景:Nemo社區(qū)中,用戶上傳的圖片免不了要在某處給用戶做展示。

如用戶上傳的頭像,那么其他用戶在瀏覽該用戶信息的時候,就會需要回顯頭像信息了。

用戶上傳的原圖可能由于清晰度較高而體積也相對較大,考慮用戶流量帶寬,一般而言我們都不會直接體積巨大的原圖直接丟給用戶讓用戶慢慢下載。

這時候通常我們會在服務(wù)器對圖片進行壓縮,然后把壓縮后的圖片內(nèi)容回顯給用戶。

壓縮方案:

這里主要找了兩個java中常用的圖片壓縮工具庫:Graphics和Thumbnailator。

1、Graphics:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**
 * compressImage
 *
 * @param imageByte
 *      Image source array
 * @param ppi
 * @return
 */
public static byte[] compressImage(byte[] imageByte, int ppi) {
    byte[] smallImage = null;
    int width = 0, height = 0;
 
    if (imageByte == null)
        return null;
 
    ByteArrayInputStream byteInput = new ByteArrayInputStream(imageByte);
    try {
        Image image = ImageIO.read(byteInput);
        int w = image.getWidth(null);
        int h = image.getHeight(null);
        // adjust weight and height to avoid image distortion
        double scale = 0;
        scale = Math.min((float) ppi / w, (float) ppi / h);
        width = (int) (w * scale);
        width -= width % 4;
        height = (int) (h * scale);
 
        if (scale >= (double) 1)
            return imageByte;
 
        BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        buffImg.getGraphics().drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ImageIO.write(buffImg, "png", out);
        smallImage = out.toByteArray();
        return smallImage;
 
    } catch (IOException e) {
        log.error(e.getMessage());
        throw new RSServerInternalException("");
    }
}

重點在于:

?
1
2
BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
buffImg.getGraphics().drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

2、Thumbnailator:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * compressImage
 *
 * @param path
 * @param ppi
 * @return
 */
public static byte[] compressImage(String path, int ppi) {
    byte[] smallImage = null;
 
  try {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    Thumbnails.of(path).size(ppi, ppi).outputFormat("png").toOutputStream(out);
    smallImage = out.toByteArray();
    return smallImage;
  } catch (IOException e) {
    log.error(e.getMessage());
    throw new RSServerInternalException("");
  }
}

實際測試中,批量的情境下,后者較前者更快一些。

以上就是Java 實現(xiàn)圖片壓縮的兩種方法的詳細(xì)內(nèi)容,更多關(guān)于Java 圖片壓縮的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://www.link-nemo.com/u/10001/post/227553

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久爱电影| 一级电影中文字幕 | 一区二区三区四区免费 | 欧美激情综合五月色丁香小说 | 最近中文字幕 | 欧美日韩电影一区二区三区 | 中文字幕国产视频 | 日韩在线免费视频 | 色婷婷蜜桃 | 国产高清在线 | 国产精品久久久久久久久久久久冷 | 网站色 | 国产精品久久久久久吹潮 | 国产精品成人一区二区三区 | 99久久婷婷国产精品综合 | 成人h免费观看视频 | 污视频网站在线观看 | 亚洲综合在线视频 | 9l蝌蚪porny中文自拍 | 欧美中文字幕一区 | 一级毛片观看 | 亚洲一卡二卡 | 久久久久久久久99精品 | 中文字幕在线精品 | 欧美久久久久久久 | 国产综合精品一区二区三区 | 亚洲综合色视频在线观看 | 亚洲欧美日韩精品久久亚洲区 | 中文字幕av亚洲精品一部二部 | 九九九久久久 | 国产精品美女久久久久久免费 | 91麻豆精品国产91久久久久久 | 中文字幕免费中文 | 色爱区综合五月激情 | 精品久久久久久久久久久 | 91精品国产综合久久久久久 | 国产精品久久久久久久久久久新郎 | 久久中文视频 | 国产美女精品一区二区三区 | 欧美一区二区三 | 精品欧美一区二区三区久久久 |