共计 4531 个字符,预计需要花费 12 分钟才能阅读完成。
1. 网络文件下载
@GetMapping("downgd")
@ResponseBody
public Result downloadNet(HttpServletResponse response,String path) throws MalformedURLException {
// 下载网络文件
Result result = new Result();
URL url = new URL(path);
try {UUID uuid = UUID.randomUUID();
URLConnection conn = url.openConnection(); InputStream in = conn.getInputStream();
OutputStream out = response.getOutputStream();
response.setHeader("content-disposition","
attachment;
filename="+URLEncoder.encode(uuid+".jpg","UTF-8"));
byte [] by = new byte[1024];
int i = 0;
while((i=in.read(by))!=-1)
{out.write(by,0,i);// 通过浏览器下载
}
// 下载到具体门路
//FileOutputStream fs =
// new FileOutputStream("e:/"+uuid+".jpg");
//byte[] buffer = new byte[1204];
//int length;
//while ((byteread = inStream.read(buffer)) != -1) {
// bytesum += byteread;
// fs.write(buffer, 0, byteread);
//}
in.close();}catch (Exception e){e.printStackTrace();
result.setCode(Result.Code.SYSTEMERROR);
}
return result;
}
2. 图片合成增加文字
1、BatchNumberUtils 工具类
package com.cy.file_onload.qrCode;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
public class BatchNumberUtils {private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
private static final AtomicInteger atomicInteger = new AtomicInteger(1000000);
// 创立不间断的订单号
//@param no 数据中心编号
// @return 惟一的、不间断订单号
public static synchronized String getOrderNoByUUID(String no) {Integer uuidHashCode = UUID.randomUUID().toString().hashCode();
if (uuidHashCode < 0) {uuidHashCode = uuidHashCode * (-1);
}
String date = simpleDateFormat.format(new Date());
return no + date + uuidHashCode;
}
// 获取同一秒钟 生成的订单号间断
//@param no 数据中心编号
// @return 同一秒内订单间断的编号
public static synchronized String getOrderNoByAtomic(String no) {atomicInteger.getAndIncrement();
int i = atomicInteger.get();
String date = simpleDateFormat.format(new Date());
return no + date + i;
}
// 获取以后日期组成的文件名
//@param name 文件名前缀
// @return 组成的文件名
public static synchronized String getFileNameByDate(String name) {String date = dateFormat.format(new Date());
return name +"/"+ date;
}
}
2、图片合成全代码
@Controller
@RequestMapping("/test/")
public class ResumeTemplateServiceImpl {
private static String
ComposeFileNameManual = "compose_images";
// 申请 url 中的资源映射,不举荐写死在代码中,// 最好提供可配置,如 upload_flowChart
private String resourceHandler="/upload_flowChart/";
// 上传文件保留的本地目录,应用 @Value 获取全局配置
// 文件中配置的属性值,如 E:/java/upload_flowChart
private String uploadImagesLocation = "E://";
// 合成图片 * @param templatePath 模板地址
// @param seedPath 二维码地址
// @return 种子模板链接
@RequestMapping("imgAdd")
public String composePic(String templatePath, String seedPath) {
templatePath = "背景图片门路";
seedPath = "指标图片门路";
try {
// 文件名
String picName = UUID.randomUUID().toString() + ".jpg";
// 日期格局文件夹
String composeFileName = BatchNumberUtils.getFileNameByDate(ComposeFileNameManual);
// 合成图片文件夹
File pathFile = new File(uploadImagesLocation + File.separator + composeFileName);
// 合成文件门路
String path = uploadImagesLocation + File.separator + composeFileName + File.separator + picName;
// 数据库贮存地址
String dataPath = resourceHandler.substring(0, resourceHandler.length() - 2) + composeFileName + "/" + picName;
if (seedPath == null) {File file = new File(seedPath);
if (!file.isFile()) {System.out.println("图片源门路不是一个文件");
}
System.out.println("图片源门路不存在");
}
if (templatePath == null) {File file = new File(templatePath);
if (!file.isFile()) {System.out.println("背景图片门路不是一个文件");
}
System.out.println("背景图片门路不存在");
}
if (!pathFile.exists()) {pathFile.mkdirs();
}
//--------------------------------- 合成图片步骤 -----------------------------
// 背景 File templateFlie = new File(templatePath);
BufferedImage bg = ImageIO.read(templateFlie);// 读取背景图片
int height = bg.getHeight();// 背景图片的高
int width = bg.getWidth(); // 背景图片的宽
BufferedImage qcCode = ImageIO.read(new File(seedPath)); // 读取二维码图片 300 * 300
BufferedImage img = new BufferedImage(184, 312, BufferedImage.TYPE_INT_RGB);// 创立画布
Graphics g = img.getGraphics();// 生成画笔 开启画图
// 绘制背景图片 g.drawImage(bg.getScaledInstance(184, 312, Image.SCALE_DEFAULT), 0, 0, null); // 绘制放大后的图
// 绘制二维码图片 定位到背景图的右下角 /* g.drawImage(qcCode.getScaledInstance(width / 4, width / 4, Image.SCALE_DEFAULT),
width - (width / 4)-10, height - (width / 4)- 10, null); // 绘制放大后的图 */ // 绘制二维码图片,居中
g.drawImage(qcCode.getScaledInstance(180, 180, Image.SCALE_DEFAULT),
1, height/23, null); // 绘制放大后的图
Font font = new Font("微软雅黑", Font.PLAIN, 15);// 增加字体的属性设置
g.setFont(font);
g.setColor(Color.BLACK);
// 截取用户名称的最初一个字符
String lastChar = "张三".substring("张三".length() - 1);
// 拼接新的用户名称
String newUserName = "张三".substring(0, 1) + "**" + lastChar + "的二维码";
// 增加用户名称
g.drawString(newUserName, 2, 270);
// 关掉画笔
g.dispose();
ImageIO.write(img, "jpg", new File(path));
System.out.println("合成图片胜利,门路:" + path);
File file = new File(path);
System.out.println(file);
// 返回合成图片的门路
return dataPath;
} catch (Exception e) {return e.getMessage();
//throw new CustomException("图片合成失败", 400);
}
}
}
正文完