最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年09月11日 09:34:23   作者:Nemo  
這篇文章主要介紹了Java 實(shí)現(xiàn)圖片壓縮的兩種方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下

問(wèn)題背景。

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

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

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

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

壓縮方案:

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

1、Graphics:

    /**
	 * 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("");
		}
	}

重點(diǎn)在于:

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:

    /**
	 * 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("");
	  }
	}

實(shí)際測(cè)試中,批量的情境下,后者較前者更快一些。

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

相關(guān)文章

  • 詳解Spring?@Profile注解的使用和源碼解析

    詳解Spring?@Profile注解的使用和源碼解析

    這篇文章主要將通過(guò)源碼帶大家深入了解一下Spring中@Profile注解的原理與使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • Java中static修飾的靜態(tài)變量、方法及代碼塊的特性與使用

    Java中static修飾的靜態(tài)變量、方法及代碼塊的特性與使用

    這篇文章主要介紹了Java中static修飾的靜態(tài)變量、方法及代碼塊的特性與使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java 語(yǔ)言中Object 類和System 類詳解

    Java 語(yǔ)言中Object 類和System 類詳解

    Object 是 Java 類庫(kù)中的一個(gè)特殊類,也是所有類的父類。今天通過(guò)本文給大家介紹java object類的簡(jiǎn)單概念及常用方法,需要的朋友參考下吧
    2021-07-07
  • java實(shí)現(xiàn)操作系統(tǒng)中的最佳置換Optimal算法

    java實(shí)現(xiàn)操作系統(tǒng)中的最佳置換Optimal算法

    這篇文章主要介紹了java實(shí)現(xiàn)操作系統(tǒng)中的最佳置換Optimal算法 ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Mybatis-plus操作json字段實(shí)戰(zhàn)教程

    Mybatis-plus操作json字段實(shí)戰(zhàn)教程

    這篇文章主要介紹了Mybatis-plus操作json字段實(shí)戰(zhàn)教程,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Springmvc請(qǐng)求參數(shù)類型轉(zhuǎn)換器及原生api代碼實(shí)例

    Springmvc請(qǐng)求參數(shù)類型轉(zhuǎn)換器及原生api代碼實(shí)例

    這篇文章主要介紹了Springmvc請(qǐng)求參數(shù)類型轉(zhuǎn)換器及原生api代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Spring?AOP實(shí)現(xiàn)聲明式事務(wù)機(jī)制源碼解析

    Spring?AOP實(shí)現(xiàn)聲明式事務(wù)機(jī)制源碼解析

    這篇文章主要為大家介紹了Spring?AOP實(shí)現(xiàn)聲明式事務(wù)機(jī)制源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • SpringBoot聲明式事務(wù)的簡(jiǎn)單運(yùn)用說(shuō)明

    SpringBoot聲明式事務(wù)的簡(jiǎn)單運(yùn)用說(shuō)明

    這篇文章主要介紹了SpringBoot聲明式事務(wù)的簡(jiǎn)單運(yùn)用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • spring cloud 配置中心客戶端啟動(dòng)遇到的問(wèn)題

    spring cloud 配置中心客戶端啟動(dòng)遇到的問(wèn)題

    這篇文章主要介紹了spring cloud 配置中心客戶端啟動(dòng)遇到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 史上最全的java隨機(jī)數(shù)生成算法分享

    史上最全的java隨機(jī)數(shù)生成算法分享

    這篇文章主要介紹了史上最全的java隨機(jī)數(shù)生成算法,我分享一個(gè)最全的隨機(jī)數(shù)的生成算法,最代碼的找回密碼的隨機(jī)數(shù)就是用的這個(gè)方法
    2014-01-01

最新評(píng)論

虎林市| 拜城县| 扶风县| 禹城市| 伽师县| 托克逊县| 观塘区| 清涧县| 台南市| 礼泉县| 岳阳县| 兴国县| 贡觉县| 大同市| 谷城县| 义马市| 海林市| 南雄市| 宁强县| 漳浦县| 栖霞市| 昌邑市| 泉州市| 内乡县| 清流县| 木兰县| 武邑县| 玉溪市| 博客| 咸宁市| 紫阳县| 宣汉县| 甘洛县| 郸城县| 连江县| 宝坻区| 南岸区| 深圳市| 顺平县| 泰安市| 绍兴县|