一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - Java教程 - Java 實現圖片壓縮的兩種方法

Java 實現圖片壓縮的兩種方法

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

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

問題背景。

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

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

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

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

壓縮方案:

這里主要找了兩個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 實現圖片壓縮的兩種方法的詳細內容,更多關于Java 圖片壓縮的資料請關注服務器之家其它相關文章!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产123区在线视频观看 | 日本无卡无吗中文免费 | 欧美人禽杂交在线视频 | 男人捅女人漫画 | 亚洲视频在线观看不卡 | 日本中文字幕在线视频站 | 久久成人精品免费播放 | 先锋影音 av | 五月一区二区久久综合天堂 | 四虎影院永久网站 | 成人福利在线 | 王淑兰李思雨李铁柱乡村小说免费 | 免费在线视频一区 | 饭冈加奈子乳喷cead144 | chinese男gay飞机同志 | 农夫成人网| 第一次不是你高清在线观看 | 四虎影院新网址 | poronovideos极度变态 | 亚洲香蕉伊在人在线观看9 亚洲系列国产系列 | nxgx国产| 国产极品久久 | japan孕妇孕交| 丝袜捆绑调教视频免费区 | 精品欧美一区二区三区四区 | 波多野结衣178部中文字幕 | 欧美日韩在线观看一区二区 | 99久久99热久久精品免费看 | 久久这里只有精品无码3D | 国产在线观看91精品一区 | 60岁了天天要小伙子 | 午夜久久久久久亚洲国产精品 | 欧美操大逼视频 | 激情五月姐姐 | 亚洲AV久久久久久久无码 | 欧美多gayxxxx| 国产原创精品 | 成人榴莲视频 | 精品一卡2卡3卡4卡5卡亚洲 | 亚洲午夜精品久久久久久抢 | 男人搡女人视频免费看 |