激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 在线成人一区二区 | 色妞欧美 | 黄色片在线免费播放 | 国产免费人做人爱午夜视频 | 成人午夜精品久久久久久久蜜臀 | 91高清完整版| 亚洲一级网站 | 丰满年轻岳中文字幕一区二区 | 看免费的毛片 | 欧美成人一级片 | 黄色网址进入 | 99久久超碰中文字幕伊人 | 女18一级大黄毛片免费女人 | 成人做爽爽爽爽免费国产软件 | 日韩一级电影在线观看 | 黄色特级视频 | 蜜桃网站在线观看 | 欧美精品久久久久久久久老牛影院 | 成人福利视频导航 | 羞羞的视频免费在线观看 | 国产精品av久久久久久网址 | 国产亚洲精品久久久久久网站 | 麻豆19禁国产青草精品 | 久久亚色 | 密室逃脱第一季免费观看完整在线 | 欧美视频在线观看一区 | av在线一区二区三区 | 久久99精品久久 | 91九色丨porny丨国产jk | 曰本三级日本三级日本三级 | 日韩视频一区在线 | 蜜桃欧美性大片免费视频 | 成人免费毛片网站 | 国产一区二区精品免费 | 国产小视频在线观看 | 一级毛片免费的 | 双性精h调教灌尿打屁股的文案 | 欧美精品久久久久久久久久 | 全黄裸片武则天一级第4季 九色p | 一本大道av | 黄色一级片免费在线观看 |