spring 集成图片压缩工具Thumbnails分析

java哥 阅读:280 2021-03-31 18:15:38 评论:0

第一步:jar 文件依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
	<modelVersion>4.0.0</modelVersion> 
	<parent> 
		<groupId>com.digipower</groupId> 
		<artifactId>digipower-ucas-core</artifactId> 
		<version>0.0.1-SNAPSHOT</version> 
	</parent> 
	<artifactId>digipower-ucas-core-picture</artifactId> 
	 
	 <organization> 
		<name> The first choice provider for information construction of  archives</name> 
		<url>http://www.digipower.cn/</url> 
	</organization> 
 
	<!-- 集中定义管理依赖版本号 --> 
	<properties> 
		<thumbnailator.version>0.4.8</thumbnailator.version> 
	</properties> 
 
	<!-- 图片压缩工具依赖jar 文件 --> 
	<dependencies> 
		<dependency> 
			<groupId>net.coobird</groupId> 
			<artifactId>thumbnailator</artifactId> 
			<version>${thumbnailator.version}</version> 
		</dependency> 
	</dependencies> 
</project>

第二步:图片压缩功能代码

package com.digipower.ucas.picture.util; 
 
import java.awt.image.BufferedImage; 
import java.io.ByteArrayInputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import javax.imageio.ImageIO; 
import org.apache.commons.io.output.ByteArrayOutputStream; 
import net.coobird.thumbnailator.Thumbnails; 
import net.coobird.thumbnailator.geometry.Position; 
 
/** 
 *  
 * @ClassName:  PictureUtil    
 * @Description: 图片压缩工具类   
 * @author: **** -zzg 
 * @date:   2019年4月24日 上午9:17:48    
 *      
 * @Copyright: 2019 www.digipower.cn  
 * 注意:本内容仅限于深圳市***开发有限公司内部使用,禁止用于其他的商业目的 
 */  
 
  
public class PictureUtil { 
	/** 
	 * 指定大小进行缩放 若图片横比width小,高比height小,不变 若图片横比width小,高比height大,高缩小到height,图片比例不变 
	 * 若图片横比width大,高比height小,横缩小到width,图片比例不变 
	 * 若图片横比width大,高比height大,图片按比例缩小,横为width或高为height 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param suffix 
	 * 			  图片后缀名:jpg、png 
	 * @throws IOException 
	 */ 
	public static void imgThumb(String source, String output, int width, 
			int height, float quality, String suffix) throws IOException { 
		Thumbnails.of(source).size(width, height).outputQuality(quality) 
				.outputFormat(suffix).toFile(output); 
	} 
  
	/** 
	 *  
	 * @Title: imgThumbOutputStream    
	 * @Description: 图片压缩转换成输出流进行输出    
	 * @param: @param source 
	 * @param: @param width 
	 * @param: @param height 
	 * @param: @param quality 
	 * @param: @param suffix 
	 * @param: @return 
	 * @param: @throws IOException       
	 * @return: OutputStream       
	 * @throws 
	 */ 
	public static OutputStream imgThumbOutputStream(String source, int width, 
			int height, float quality , String suffix) throws IOException { 
  
		OutputStream os = new ByteArrayOutputStream(); 
		Thumbnails.of(source).size(width, height).outputQuality(quality) 
				.outputFormat(suffix).toOutputStream(os); 
		return os; 
	} 
  
	/** 
	 * 指定大小进行缩放 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param suffix 
	 *            图片后缀名称 
	 * @throws IOException 
	 */ 
	public static void imgThumb(File source, String output, int width, 
			int height, float quality, String suffix) throws IOException { 
		Thumbnails.of(source).size(width, height).outputQuality(quality) 
				.outputFormat(suffix).toFile(output); 
	} 
  
	/** 
	 * 按照比例进行缩放(图片路径) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param scale 
	 *            缩放百分比 
	 * @param suffix 
	 *            图片后缀名 
	 * @throws IOException 
	 */ 
	public static void imgScale(String source, String output, double scale, String suffix) 
			throws IOException { 
		Thumbnails.of(source).scale(scale).outputFormat(suffix).toFile(output); 
	} 
  
	/** 
	 * 按照比例进行缩放(图片文件) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param scale 
	 *            缩放百分比 
	 * @param suffix 
	 *            图片后缀名 
	 * @throws IOException 
	 */ 
	public static void imgScale(File source, String output, double scale, String suffix) 
			throws IOException { 
		Thumbnails.of(source).scale(scale).outputFormat("jpg").toFile(output); 
	} 
  
	/** 
	 * 按照比例进行缩放(输出流) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param scale 
	 *            缩放百分比 
	 * @param suffix 
	 *            图片后缀名 
	 * @throws IOException 
	 */ 
	public static OutputStream imgScaleOutputStream(File source, double scale, String suffix) 
			throws IOException { 
		OutputStream os = new ByteArrayOutputStream(); 
		Thumbnails.of(source).scale(scale).outputFormat(suffix) 
				.toOutputStream(os); 
		return os; 
	} 
  
	/** 
	 * 按照比例进行缩放(字节数组) 
	 * 
	 * @param source 
	 *            输入字节数组 
	 * @param scale 
	 *            缩放百分比 
	 * @param suffix 
	 *            图片后缀名 
	 * @throws IOException 
	 */ 
	public static byte[] imgScaleByte(byte[] source, double scale, String suffix) 
			throws IOException { 
  
		ByteArrayOutputStream os = new ByteArrayOutputStream(); 
		InputStream input = new ByteArrayInputStream(source); 
		Thumbnails.of(input).scale(scale).outputFormat(suffix) 
				.toOutputStream(os); 
		return os.toByteArray(); 
	} 
  
	/** 
	 * 不按照比例,指定大小进行缩放(图片文件路径) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param keepAspectRatio 
	 *            默认是按照比例缩放的,值为false 时不按比例缩放 
	 * @param suffix 
	 *            图片后缀名 
	 */ 
	public static void imgNoScale(String source, String output, int width, 
			int height, boolean keepAspectRatio, String suffix) throws IOException { 
		Thumbnails.of(source).size(width, height) 
				.keepAspectRatio(keepAspectRatio).outputFormat(suffix) 
				.toFile(output); 
	} 
	 
	/** 
	 * 不按照比例,指定大小进行缩放(图片文件) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param keepAspectRatio 
	 *            默认是按照比例缩放的,值为false 时不按比例缩放 
	 * @param suffix 
	 *            图片后缀名 
	 */ 
	public static void imgNoScale(File source, String output, int width, 
			int height, boolean keepAspectRatio, String suffix) throws IOException { 
		Thumbnails.of(source).size(width, height) 
				.keepAspectRatio(keepAspectRatio).outputFormat(suffix) 
				.toFile(output); 
	} 
  
	/** 
	 * 旋转 ,正数:顺时针 负数:逆时针(图片文件路径) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param rotate 
	 *            角度 
	 * @param suffix 
	 *            图片后缀名 
	 */ 
	public static void imgRotate(String source, String output, int width, 
			int height, double rotate, String suffix) throws IOException { 
		Thumbnails.of(source).size(width, height).rotate(rotate) 
				.outputFormat(suffix).toFile(output); 
	} 
  
	/** 
	 * 旋转 ,正数:顺时针 负数:逆时针(图片文件) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param rotate 
	 *            角度 
	 * @param suffix 
	 *            图片后缀名 
	 */ 
	public static void imgRotate(File source, String output, int width, 
			int height, double rotate, String suffix) throws IOException { 
		Thumbnails.of(source).size(width, height).rotate(rotate) 
				.outputFormat(suffix).toFile(output); 
	} 
  
	/** 
	 * 水印(图片文件路径) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输入源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param position 
	 *            水印位置 Positions.BOTTOM_RIGHT o.5f 
	 * @param watermark 
	 *            水印图片地址 
	 * @param transparency 
	 *            透明度 0.5f 
	 * @param quality 
	 *            图片质量 0.8f 
	 * @param suffix 
	 *            图片后缀名 
	 */ 
	public static void imgWatermark(String source, String output, int width, 
			int height, Position position, String watermark, 
			float transparency, float quality, String suffix) throws IOException { 
		Thumbnails 
				.of(source) 
				.size(width, height) 
				.watermark(position, ImageIO.read(new File(watermark)), 
						transparency).outputQuality(0.8f).outputFormat(suffix) 
				.toFile(output); 
	} 
	 
	/** 
	 * 水印(图片文件) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输入源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param position 
	 *            水印位置 Positions.BOTTOM_RIGHT o.5f 
	 * @param watermark 
	 *            水印图片地址 
	 * @param transparency 
	 *            透明度 0.5f 
	 * @param quality 
	 *            图片质量 0.8f 
	 * @param suffix 
	 *            图片后缀名称 
	 */ 
  
	public static void imgWatermark(File source, String output, int width, 
			int height, Position position, String watermark, 
			float transparency, float quality, String suffix) throws IOException { 
		Thumbnails 
				.of(source) 
				.size(width, height) 
				.watermark(position, ImageIO.read(new File(watermark)), 
						transparency).outputQuality(0.8f).outputFormat(suffix) 
				.toFile(output); 
	} 
  
	/** 
	 * 裁剪图片(图片文件路径) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param position 
	 *            裁剪位置 
	 * @param x 
	 *            裁剪区域x 
	 * @param y 
	 *            裁剪区域y 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param keepAspectRatio 
	 *            默认是按照比例缩放的,值为false 时不按比例缩放 
	 * @param suffix 
	 *            图片后缀名成 
	 */ 
	public static void imgSourceRegion(String source, String output, 
			Position position, int x, int y, int width, int height, 
			boolean keepAspectRatio, String suffix) throws IOException { 
		Thumbnails.of(source).sourceRegion(position, x, y).size(width, height) 
				.keepAspectRatio(keepAspectRatio).outputFormat(suffix) 
				.toFile(output); 
	} 
  
	 
	/** 
	 * 裁剪图片(图片文件) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param position 
	 *            裁剪位置 
	 * @param x 
	 *            裁剪区域x 
	 * @param y 
	 *            裁剪区域y 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param keepAspectRatio 
	 *            默认是按照比例缩放的,值为false 时不按比例缩放 
	 * @param suffix 
	 *            图片后缀名成 
	 */ 
	public static void imgSourceRegion(File source, String output, 
			Position position, int x, int y, int width, int height, 
			boolean keepAspectRatio, String suffix) throws IOException { 
		Thumbnails.of(source).sourceRegion(position, x, y).size(width, height) 
				.keepAspectRatio(keepAspectRatio).outputFormat(suffix) 
				.toFile(output); 
	} 
  
	/** 
	 * 按坐标裁剪(图片路径) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param x 
	 *            起始x坐标 
	 * @param y 
	 *            起始y坐标 
	 * @param x1 
	 *            结束x坐标 
	 * @param y1 
	 *            结束y坐标 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param keepAspectRatio 
	 *            默认是按照比例缩放的,值为false 时不按比例缩放 
	 */ 
	public static void imgSourceRegion(String source, String output, int x, 
			int y, int x1, int y1, int width, int height, 
			boolean keepAspectRatio) throws IOException { 
		Thumbnails.of(source).sourceRegion(x, y, x1, y1).size(width, height) 
				.keepAspectRatio(keepAspectRatio).toFile(output); 
	} 
	 
	/** 
	 * 按坐标裁剪(图片文件) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param x 
	 *            起始x坐标 
	 * @param y 
	 *            起始y坐标 
	 * @param x1 
	 *            结束x坐标 
	 * @param y1 
	 *            结束y坐标 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param keepAspectRatio 
	 *            默认是按照比例缩放的,值为false 时不按比例缩放 
	 * @param suffix 
	 *            图片后缀名称 
	 */ 
	public static void imgSourceRegion(File source, String output, int x, 
			int y, int x1, int y1, int width, int height, 
			boolean keepAspectRatio, String suffix) throws IOException { 
		Thumbnails.of(source).sourceRegion(x, y, x1, y1).size(width, height) 
				.keepAspectRatio(keepAspectRatio).outputFormat(suffix) 
				.toFile(output); 
	} 
  
	/** 
	 * 转化图像格式(图片路径) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param format 
	 *            图片类型,gif、png、jpg 
	 */ 
	public static void imgFormat(String source, String output, int width, 
			int height, String format) throws IOException { 
		Thumbnails.of(source).size(width, height).outputFormat(format) 
				.toFile(output); 
	} 
  
	/** 
	 * 转化图像格式(图片路径) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param format 
	 *            图片类型,gif、png、jpg 
	 * @param suffix 
	 *            图片后缀名称 
	 */ 
	public static void imgFormat(File source, String output, int width, 
			int height, String format, String suffix) throws IOException { 
		Thumbnails.of(source).size(width, height).outputFormat(format) 
				.outputFormat(suffix).toFile(output); 
	} 
  
	/** 
	 * 输出到OutputStream(图片路径) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param suffix 
	 *            图片后缀名称 
	 * @return toOutputStream(流对象) 
	 */ 
	public static OutputStream imgOutputStream(String source, String output, 
			int width, int height, String suffix) throws IOException { 
		OutputStream os = new FileOutputStream(output); 
		Thumbnails.of(source).size(width, height).outputFormat(suffix) 
				.toOutputStream(os); 
		return os; 
	} 
  
	/** 
	 * 输出到OutputStream(图片文件) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param suffix 
	 *            图片后缀名称 
	 * @return toOutputStream(流对象) 
	 */ 
	public static OutputStream imgOutputStream(File source, String output, 
			int width, int height, String suffix) throws IOException { 
		OutputStream os = new FileOutputStream(output); 
		Thumbnails.of(source).size(width, height).outputFormat(suffix) 
				.toOutputStream(os); 
		return os; 
	} 
  
	/** 
	 * 输出到BufferedImage(图片文件路径) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param format 
	 *            图片类型,gif、png、jpg 
	 * @param suffix 
	 *            图片后缀名称 
	 * @return BufferedImage 
	 */ 
	public static BufferedImage imgBufferedImage(String source, String output, 
			int width, int height, String format, String suffix) throws IOException { 
		BufferedImage buf = Thumbnails.of(source).size(width, height) 
				.outputFormat(suffix).asBufferedImage(); 
		ImageIO.write(buf, format, new File(output)); 
		return buf; 
	} 
  
	/** 
	 * 输出到BufferedImage(图片文件) 
	 * 
	 * @param source 
	 *            输入源 
	 * @param output 
	 *            输出源 
	 * @param width 
	 *            宽 
	 * @param height 
	 *            高 
	 * @param format 
	 *            图片类型,gif、png、jpg 
	 * @param suffix 
	 *            图片后缀名称 
	 * @return BufferedImage 
	 */ 
	public static BufferedImage imgBufferedImage(File source, String output, 
			int width, int height, String format, String suffix) throws IOException { 
		BufferedImage buf = Thumbnails.of(source).size(width, height) 
				.outputFormat(suffix).asBufferedImage(); 
		ImageIO.write(buf, format, new File(output)); 
		return buf; 
	} 
} 

 

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号