Commit d428236b authored by unset's avatar unset

Merge remote-tracking branch 'origin/dev' into dev

parents 09215a96 3d728d5a
......@@ -9,6 +9,10 @@
# profiles:
# active: dev
spring:
# servlet:
# multipart:
# max-file-size: 3000MB
# max-request-size: 3000MB
profiles:
active: dev
application:
......
package com.upyuns.platform.rs.universal.utils;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
/**
*
* @Title ImageWatermarkUtil
* @Description
* @author Zheng.Zeng
* @date 2018年8月29日 下午4:47:38
*/
public class ImageWatermarkUtil {
// 水印透明度
private static float alpha = 0.5f;
// 水印文字大小
public static final int FONT_SIZE = 28;
// 水印文字字体
private static Font defaultFont = new Font ("微软雅黑", Font.BOLD, FONT_SIZE);
// 水印文字颜色
private static Color color = Color.white;
// 水印之间的间隔
private static final int XMOVE = 80;
// 水印之间的间隔
private static final int YMOVE = 80;
/**
* 获取文本长度。汉字为1:1,英文和数字为2:1
*/
private static int getTextLength (String text) {
int length = text.length ();
for (int i = 0; i < text.length (); i++) {
String s = String.valueOf (text.charAt (i));
if (s.getBytes ().length > 1) {
length++;
}
}
length = length % 2 == 0 ? length / 2 : length / 2 + 1;
return length;
}
/**
* 给图片添加水印文字
*
* @param logoText 水印文字
* @param srcImgPath 源图片路径
* @param targerPath 目标图片路径
*/
public static void ImageByText (String logoText, String srcImgPath, String targerPath) throws IOException {
Image srcImg = ImageIO.read (new File (srcImgPath));
ImageByText (logoText, srcImg, targerPath, null, null);
}
/**
* 给图片添加水印文字、可设置水印文字的旋转角度
*
* @param logoText
// * @param srcImgPath
* @param srcImg
* @param targerPath
* @param degree
*/
public static void ImageByText (String logoText, Image srcImg, String targerPath, Integer degree, Font font) {
if(null == font){
font = defaultFont;
}
InputStream is = null;
OutputStream os = null;
try {
// 源图片
//Image srcImg = ImageIO.read (new File (srcImgPath));
int width = srcImg.getWidth (null);// 原图宽度
int height = srcImg.getHeight (null);// 原图高度
BufferedImage buffImg = new BufferedImage (srcImg.getWidth (null), srcImg.getHeight (null),
BufferedImage.TYPE_INT_RGB);
// 得到画笔对象
Graphics2D g = buffImg.createGraphics ();
// 设置对线段的锯齿状边缘处理
g.setRenderingHint (RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage (srcImg.getScaledInstance (srcImg.getWidth (null), srcImg.getHeight (null), Image.SCALE_SMOOTH),
0, 0, null);
// 设置水印旋转
if (null != degree) {
g.rotate (Math.toRadians (degree), (double) buffImg.getWidth () / 2, (double) buffImg.getHeight () / 2);
}
// 设置水印文字颜色
g.setColor (color);
// 设置水印文字Font
g.setFont (font);
// 设置水印文字透明度
g.setComposite (AlphaComposite.getInstance (AlphaComposite.SRC_ATOP, alpha));
int x = -width / 2;
int y = -height / 2;
int markWidth = FONT_SIZE * getTextLength (logoText);// 字体长度
int markHeight = FONT_SIZE;// 字体高度
// 循环添加水印
while (x < width * 1.5) {
y = -height / 2;
while (y < height * 1.5) {
g.drawString (logoText, x, y);
y += markHeight + YMOVE;
}
x += markWidth + XMOVE;
}
// 释放资源
g.dispose ();
// 生成图片
os = new FileOutputStream (targerPath);
ImageIO.write (buffImg, "JPG", os);
System.out.println ("添加水印文字成功!");
} catch (Exception e) {
e.printStackTrace ();
} finally {
try {
if (null != is)
is.close ();
} catch (Exception e) {
e.printStackTrace ();
}
try {
if (null != os)
os.close ();
} catch (Exception e) {
e.printStackTrace ();
}
}
}
}
\ No newline at end of file
package com.upyuns.platform.rs.universal.controller;
import cn.hutool.core.img.ImgUtil;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
......@@ -14,6 +15,7 @@ import com.upyuns.platform.rs.universal.utils.ImgBase64Util;
import com.upyuns.platform.rs.universal.utils.PublicMsg;
import com.upyuns.platform.rs.universal.vo.Ueditor;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -22,6 +24,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.awt.*;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
......@@ -45,24 +48,52 @@ public class UploadController{
@Autowired
UploadZipService uploadZipService;
private static Integer MAX_DRIVING_LICENSE_SIZE = 10 * 1024 * 1024;//10M
@Data
static public class DisposeDTO {
private String context = "人民星云";
private Integer size = 36;
private Integer x = 0;
private Integer y = 0;
private Integer style = Font.BOLD;
private String styleName = "宋体";
private Float alpha = 0.5f;
private Float scaleHight = 320f;
private Float scaleWidth = 360f;
private Color color = Color.WHITE;
private Integer colorNum;
private Integer degree = -40;
public void setColorNum(Integer colorNum) {
this.colorNum = colorNum;
if(1 == colorNum) {
this.color = Color.WHITE;
}else if (2 == colorNum) {
this.color = Color.BLACK;
}else if (3 == colorNum) {
this.color = Color.GRAY;
}
}
}
@RequestMapping(value = "/app/unauth/upload", method = RequestMethod.POST)
@RequestMapping(value = "/app/unauth/upload", method = RequestMethod.POST)
public JSONObject upload(
@RequestParam("file") MultipartFile file,
@RequestParam(value = "prefix",defaultValue = "app")String prefix
)throws Exception {
String contentType = file.getContentType(); //图片文件类型
// String fileName = file.getOriginalFilename(); //图片名字
/* if (!contentType.equals("image/jpeg") && !contentType.equals("image/gif")&&!contentType.equals("image/png")) {
return JsonResultUtil.createFailedResult(2001,"格式不对!!!");
}*/
if (file.getSize() > MAX_DRIVING_LICENSE_SIZE) {
return JsonResultUtil.createFailedResult(2002,"大小超过限制!!!");
}
return JsonResultUtil.createSuccessResultWithObj(uploadService.uploadFile(file,prefix));
}
@RequestMapping(value = "/app/unauth/uploadDispose", method = RequestMethod.POST)
public JSONObject uploadDispose(
@RequestParam("file") MultipartFile file,
@RequestParam(value = "prefix",defaultValue = "app")String prefix,
DisposeDTO dto
)throws Exception {
String contentType = file.getContentType(); //图片文件类型
return JsonResultUtil.createSuccessResultWithObj(uploadService.uploadFileDispose(file, prefix, dto));
}
@ApiOperation("视频上传")
@RequestMapping(value = "/app/unauth/uploadVideo", method = RequestMethod.POST)
public JSONObject uploadVideo(
......@@ -72,6 +103,17 @@ public class UploadController{
return JsonResultUtil.createSuccessResultWithObj(uploadService.uploadFile(file,prefix));
}
@RequestMapping(value = "/admin/uploadDispose", method = RequestMethod.POST)
public JSONObject adminUploadDispose(
@RequestParam("file") MultipartFile file,
@RequestParam(value = "prefix",defaultValue = "app")String prefix,
DisposeDTO dto
)throws Exception {
String contentType = file.getContentType(); //图片文件类型
return JsonResultUtil.createSuccessResultWithObj(uploadService.uploadFileDispose(file, prefix, dto));
}
@RequestMapping(value = "/app/unauth/admin/upload", method = RequestMethod.POST)
public JSONObject uploads(
@RequestParam("file") MultipartFile file,
......@@ -82,9 +124,9 @@ public class UploadController{
/* if (!contentType.equals("image/jpeg") && !contentType.equals("image/gif")&&!contentType.equals("image/png")) {
return JsonResultUtil.createFailedResult(2001,"格式不对!!!");
}*/
if (file.getSize() > MAX_DRIVING_LICENSE_SIZE) {
return JsonResultUtil.createFailedResult(2002,"大小超过限制!!!");
}
// if (file.getSize() > MAX_DRIVING_LICENSE_SIZE) {
// return JsonResultUtil.createFailedResult(2002,"大小超过限制!!!");
// }
return JsonResultUtil.createSuccessResultWithObj(uploadService.uploadFile(file,prefix));
}
......@@ -106,10 +148,10 @@ public class UploadController{
MultipartFile file = files[i];
//保存文件
String contentType = file.getContentType();
if (file.getSize() > MAX_DRIVING_LICENSE_SIZE) {
log.error("大小超过限制!!!");
continue;
}
// if (file.getSize() > MAX_DRIVING_LICENSE_SIZE) {
// log.error("大小超过限制!!!");
// continue;
// }
String path=uploadService.uploadFile(file,prefix);
if(StringUtils.isBlank(urls)){
urls+=path;
......
package com.upyuns.platform.rs.universal.service;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import cn.hutool.core.img.ImgUtil;
import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.upyuns.platform.rs.universal.constant.RedisKey;
import com.upyuns.platform.rs.universal.controller.UploadController;
import com.upyuns.platform.rs.universal.utils.ImageWatermarkUtil;
import com.upyuns.platform.rs.universal.utils.ImgBase64Util;
import org.apache.commons.io.FileUtils;
import org.joda.time.DateTime;
......@@ -19,6 +21,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
......@@ -61,6 +65,53 @@ public class UploadService {
return realFileRelPath;
}
/**
* 写入上传文件,返回相对路径
* @param file
* @return
*/
public String uploadFileDispose(MultipartFile file, String prefix, UploadController.DisposeDTO dto) throws Exception{
//创建本日存放目录
DateTime now = DateTime.now();
String dirPathToday = "/"+prefix+ "/" + now.toString(DEFAULT_DATE_TIME_FORMATTER);
String redisNoKey = RedisKey.UPLOAD_FILE_NO_PREFIX + now.toString(DEFAULT_DATE_TIME_FORMATTER);
Long no = redisTemplate.opsForValue().increment(redisNoKey);
if(no.equals(1l)){
redisTemplate.expire(redisNoKey,1, TimeUnit.DAYS);
}
String fileName = file.getOriginalFilename();
String realFileRelPath = dirPathToday + "/" + no + fileName.substring(fileName.lastIndexOf("."));
//文件存放路径
String filePath = baseUploadPath + realFileRelPath;
//缩略
BufferedImage bufferedImage = ImgUtil.read(file.getInputStream());
Image newImage = null;
if(bufferedImage.getHeight() > dto.getScaleHight() && bufferedImage.getWidth() > dto.getScaleWidth()) {
Float scale = 1.0f;
if(bufferedImage.getHeight() < bufferedImage.getWidth()) {
scale = dto.getScaleHight() / bufferedImage.getHeight();
}else {
scale = dto.getScaleWidth() / bufferedImage.getWidth();
}
newImage = ImgUtil.scale(bufferedImage, scale);
}else {
newImage = bufferedImage;
}
//加水印
Font font = new Font(dto.getStyleName(),dto.getStyle(),dto.getSize());
//Image newImage2 = ImgUtil.pressText(newImage, dto.getContext(), dto.getColor(), font, dto.getX(), dto.getY(), dto.getAlpha());
//将文件写入指定位置
//ImgUtil.write(newImage2, new File(filePath));
ImageWatermarkUtil.ImageByText(dto.getContext(), newImage, filePath, dto.getDegree(), font);
//将文件写入指定位置
//FileUtils.copyInputStreamToFile(file.getInputStream(), new File(filePath));
realFileRelPath=xx_url+SystemConfig.XXMP_URL+realFileRelPath;
return realFileRelPath;
}
/**
* 写入上传文件,返回相对路径
* @param imgFile
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment