概述
2021SC@SDUSC
目录
项目名称:multimedia-utils
FIleUtil(工具类)
文档
图片工具ImageMagickUtils
相关文件
项目名称:multimedia-utils
博客四
FIleUtil(工具类)
这是一个文件处理的工具类。该file文件操作工具类实现功能包括:文件的增删改查,移动文件,文件内容的读取,较大的特点是通过反射获取包下所有类。不过这只是我们一些的补充知识,关于我们的工具所用的无非两大项,一个是将上传的MultipartFile转化为File,另一个是获取文件拓展名。注意这里要考虑好文件名不存在的情况。下面给出我们项目的相关代码。
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
public class FileUtil {
/**
* 将上传的MultipartFile转化为File
*/
public static File multipartFile2File(MultipartFile multipartFile, String directory) {
String suffix = getSuffix(multipartFile.getOriginalFilename());
File tempFile = null;
try {
tempFile = new File(directory + "/" + UUID.randomUUID().toString() + suffix);
multipartFile.transferTo(tempFile);
} catch (IOException e) {
throw new RuntimeException("multipartFile转File失败", e);
}
return tempFile;
}
/**
* 获取文件拓展名
*/
public static String getSuffix(String fileName) {
if (fileName == null) {
throw new RuntimeException("获取文件拓展名失败");
}
int index = fileName.lastIndexOf(".");
if (-1 == index) {
throw new RuntimeException("获取文件拓展名失败");
}
return fileName.substring(index);
}
}
文档
下面我们介绍各个文件所实现的功能和用处。首先来看图片工具ImageMagickUtils。
图片工具ImageMagickUtils
方法
1.图片裁切后修改分辨率并指定输出文件格式
cropAndResize(tempDirectory,inputFileName,cropAttributes,resizeAttributes,outputFileSuffix)
2.图片裁切后修改分辨率
cropAndResize(tempDirectory,inputFileName,cropAttributes,resizeAttributes)
3.图片裁切并指定输出文件格式
crop(tempDirectory,inputFileName,cropAttributes,outputFileSuffix)
4.图片裁切
crop(tempDirectory,inputFileName,cropAttributes)
5.图片修改分辨率并指定输出文件格式
resize(tempDirectory,inputFileName,resizeAttributes,outputFileSuffix)
6.图片修改分辨率
resize(tempDirectory,inputFileName,resizeAttributes)
参数介绍
输入参数
参数 | 类型 | 必需 | 注释 |
---|---|---|---|
tempDirectory | String | 是 | 临时文件目录 |
inputFileName | String | 是 | 输入文件名 |
cropAttributes | CropAttributes | 否 | 裁切参数 |
resizeAttributes | ResizeAttributes | 否 | 修改分辨率参数 |
outputFileSuffix | Suffix | 否 | 输出文件格式,未设置则同输入文件格式 |
其中:
CropAttributes
参数 | 类型 | 必需 | 注释 |
---|---|---|---|
width | Integer | 是 | 裁切图片的宽 |
height | Integer | 是 | 裁切图片的高 |
leftOffset | Integer | 是 | 距左边偏移量 |
topOffset | Integer | 是 | 距顶部偏移量 |
ResizeAttributes
参数 | 类型 | 必需 | 注释 |
---|---|---|---|
width | Integer | 否 | 输出图片的宽,只填写宽则高自适应 |
height | Integer | 否 | 输出图片的高,只填写高则宽自适应 |
quality | Integer | 否 | 输出图片的质量,范围0~100,默认100 |
输出参数
参数 | 类型 | 必需 | 注释 |
---|---|---|---|
outputFileName | String | 是 | 输出文件名 |
看完上述内容后,我们便可以给出整个文件代码。
相关文件
package com.whty.zdxt.multimedia.util;
import com.whty.zdxt.multimedia.attribute.CropAttributes;
import com.whty.zdxt.multimedia.attribute.ResizeAttributes;
import com.whty.zdxt.multimedia.enumeration.Suffix;
/**
* @author GuoNanLin
* @date 2020-10-30
*/
public class ImageMagickUtils {
/**
* ImageMagick命令magick,需设置magick环境变量
*/
private static final String MAGICK = "magick";
/**
* 图片裁切 并 修改分辨率
*
* @param tempDirectory
临时文件目录
* @param inputFileName
输入文件名
* @param cropAttributes
裁切参数
* @param resizeAttributes 修改分辨率参数
* @param outputFileSuffix 输出文件后缀名
* @return 输出文件名
*/
public String cropAndResize(String tempDirectory, String inputFileName, CropAttributes cropAttributes, ResizeAttributes resizeAttributes, Suffix outputFileSuffix) {
if (!FileUtils.checkFileName(inputFileName)) {
throw new RuntimeException("输入文件名格式错误");
}
// 设置输出文件后缀及名称
String suffix = null;
if (outputFileSuffix == null) {
suffix = FileUtils.getSuffix(inputFileName);
} else {
suffix = outputFileSuffix.getCode();
}
String outputFileName = FileUtils.createFileName(suffix);
// 拼接命令
StringBuilder command = new StringBuilder();
command.append(MAGICK);
command.append(" ");
command.append(FileUtils.getFilePath(tempDirectory, inputFileName));
command.append(" ");
command.append("-background white -flatten ");
// 设置裁切参数
if (cropAttributes != null) {
Integer width = cropAttributes.getWidth();
Integer height = cropAttributes.getHeight();
Integer leftOffset = cropAttributes.getLeftOffset();
Integer topOffset = cropAttributes.getTopOffset();
if (width == null || height == null || leftOffset == null || topOffset == null) {
throw new RuntimeException("CropAttributes缺失必要参数");
}
command.append("-crop");
command.append(" ");
// 拼接裁切参数 例:3000x1200+1000+500
command.append(String.format("%sx%s%s%s", width, height, leftOffset < 0 ? leftOffset : "+" + leftOffset, topOffset < 0 ? topOffset : "+" + topOffset));
command.append(" ");
}
// 设置修改分辨率参数
if (resizeAttributes != null) {
Integer width = resizeAttributes.getWidth();
Integer height = resizeAttributes.getHeight();
if (width == null && height == null) {
throw new RuntimeException("ResizeAttributes缺失必要参数");
}
command.append("-resize");
command.append(" ");
if (width != null) {
command.append(width);
}
if (height != null) {
command.append("x");
command.append(height);
}
command.append(">");
command.append(" ");
// 设置输出质量参数
if (resizeAttributes.getQuality() != null) {
command.append("-quality ");
command.append(resizeAttributes.getQuality());
command.append(" ");
}
}
// 如果输出为.webp,则设置为无损格式
if (Suffix.WEBP_LOSSLESS == outputFileSuffix) {
command.append("-define webp:lossless=true ");
}
// 设置输出文件名
command.append(FileUtils.getFilePath(tempDirectory, outputFileName));
RuntimeUtils.execSF(command.toString());
return outputFileName;
}
/**
* 图片裁切 并 修改分辨率
*
* @param tempDirectory
临时文件目录
* @param inputFileName
输入文件名
* @param cropAttributes
裁切参数
* @param resizeAttributes 修改分辨率参数
* @return 输出文件名
*/
public String cropAndResize(String tempDirectory, String inputFileName, CropAttributes cropAttributes, ResizeAttributes resizeAttributes) {
return this.cropAndResize(tempDirectory, inputFileName, cropAttributes, resizeAttributes, null);
}
/**
* 图片裁切
*
* @param tempDirectory
临时文件目录
* @param inputFileName
输入文件名
* @param cropAttributes
裁切参数
* @param outputFileSuffix 输出文件后缀名
* @return 输出文件名
*/
public String crop(String tempDirectory, String inputFileName, CropAttributes cropAttributes, Suffix outputFileSuffix) {
return this.cropAndResize(tempDirectory, inputFileName, cropAttributes, null, outputFileSuffix);
}
/**
* 图片裁切
*
* @param tempDirectory
临时文件目录
* @param inputFileName
输入文件名
* @param cropAttributes 裁切参数
* @return 输出文件名
*/
public String crop(String tempDirectory, String inputFileName, CropAttributes cropAttributes) {
return this.cropAndResize(tempDirectory, inputFileName, cropAttributes, null, null);
}
/**
* 图片分辨率修改
*
* @param tempDirectory
临时文件目录
* @param inputFileName
输入文件名
* @param resizeAttributes 分辨率属性
* @param outputFileSuffix 输出文件后缀名
* @return 输入文件名
*/
public String resize(String tempDirectory, String inputFileName, ResizeAttributes resizeAttributes, Suffix outputFileSuffix) {
return this.cropAndResize(tempDirectory, inputFileName, null, resizeAttributes, outputFileSuffix);
}
/**
* 图片分辨率修改
*
* @param tempDirectory
临时文件目录
* @param inputFileName
输入文件名
* @param resizeAttributes 分辨率属性
* @return 输入文件名
*/
public String resize(String tempDirectory, String inputFileName, ResizeAttributes resizeAttributes) {
return this.cropAndResize(tempDirectory, inputFileName, null, resizeAttributes, null);
}
}
最后
以上就是朴实发箍为你收集整理的2021SC@SDUSC-multimedia-utils-一款java后端的图片、视频处理工具jar包FIleUtil(工具类)的全部内容,希望文章能够帮你解决2021SC@SDUSC-multimedia-utils-一款java后端的图片、视频处理工具jar包FIleUtil(工具类)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复