1.海报显示的速度比较慢。

原因:图片过大。

解决:在数据库中增加字段,存压缩后的图片。在上传图片的时候,对图片进行压缩处理,存两份,一份原图,一份压缩图。

显示图片列表的时候查询压缩图,查看详情的时候,去查原图。

压缩图片的工具类:

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;/*** * @ClassName: ImageBiz* @Description:压缩图片方法*/
public class ImageBizUtil {/*** * @Title: imageZip* @Description: 根据分辨率压缩图片* @param oldByte 源图片字节* @param width 压缩图片的宽* @param height 压缩图片的高* @return* @throws IOException* @return: byte[]* @throws*/public static byte[] imageZip(byte[] oldByte, int width, int height) throws IOException {ByteArrayOutputStream os = null;InputStream inputStream = null;try {inputStream = new ByteArrayInputStream(oldByte);// 用系统缓存ImageIO.setUseCache(false);// 或者设定一个缓存路径// ImageIO.setCacheDirectory(File cacheDirectory);BufferedImage image = ImageIO.read(inputStream);// 为等比缩放计算输出的图片宽度及高度int imageWidth = image.getWidth(null);int imageHeight = image.getHeight(null);float ratio = getRatio(imageWidth, imageHeight, width, height);int newWidth = (int) (ratio * imageWidth);int newHeight = (int) (ratio * imageHeight);BufferedImage newBufferedImage =new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);newBufferedImage.getGraphics().drawImage(image.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpeg");ImageWriter imageWriter = iter.next();ImageWriteParam iwp = imageWriter.getDefaultWriteParam();iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);os = new ByteArrayOutputStream(oldByte.length);imageWriter.setOutput(ImageIO.createImageOutputStream(os));IIOImage iio_image = new IIOImage(newBufferedImage, null, null);imageWriter.write(null, iio_image, iwp);os.flush();byte[] newBytes = os.toByteArray();return newBytes;} catch (IOException e) {throw e;} finally {if (os != null) {os.close();}if (inputStream != null) {inputStream.close();}}}/*** * @Title: getRatio* @Description: 压缩比例算法* @param imageWidth 原图片宽* @param imageHeight 原图片高* @param width 压缩后的图片宽* @param height 压缩后的图片高* @return* @return: float*/public static float getRatio(int imageWidth, int imageHeight, int width, int height) {float Ratio = 1.0f;float widthRatio = (float) width / imageWidth;float heightRatio = (float) height / imageHeight;if (widthRatio < 1.0 || heightRatio < 1.0) {Ratio = widthRatio <= heightRatio ? widthRatio : heightRatio;}return Ratio;}
}

核心代码:

//海报上传public BaseResult uploadPosterInfomation(List<GoPhosterInfomationPo> list){//创建返参对象BaseResult baseResult = new BaseResult();for (int i = 0; i < list.size(); i++) {if (StringUtils.isBlank(list.get(i).getTypeCode())) {baseResult.setRet(BaseResult.BIZ_ERROR);baseResult.setMsg("请录入海报类型");return baseResult;}if (StringUtils.isBlank(list.get(i).getPhosterImage())) {baseResult.setRet(BaseResult.BIZ_ERROR);baseResult.setMsg("请选择要保存的海报模板");return baseResult;}//设置海报唯一标识
      list.get(i).setPhosterId(UUIDUtil.genUUID2());//设置海报序号Integer maxNum = posterMakeFunctionMapper.queryMaxNum();if (maxNum == null || maxNum == 0) {list.get(i).setOrderNumber(1);}else{list.get(i).setOrderNumber(maxNum+1);}//将base64图片转为二进制byte[] imgByt = ImageUtil.getImageByte(list.get(i).getPhosterImage());byte[] imgZip = null;//压缩之后的图片try {imgZip = ImageBizUtil.imageZip(imgByt, 200, 200);} catch (IOException e) {e.printStackTrace();}String imgStr = ImageUtil.getImageStr(imgZip);list.get(i).setPhosterImageZip("data:image/png;base64,"+imgStr);//保存海报
      posterMakeFunctionMapper.uploadPosterInfomation(list.get(i));}

2.在制作海报的时候,设置微软雅黑字体,在本地测试,生成的海报上的字体是微软雅黑,但是在服务器上却显示宋体。

原因:服务器没有微软雅黑字体。

解决:

01.在服务器上安装微软雅黑字体

1.到windows环境下找到微软雅黑字体库,C:\Windows\Fonts。msyf.ttf(微软雅黑))
2.到linux环境下创建目录
mkdir -pv /usr/share/fonts/chinese/TrueType
使用rz命令,将字体放入目录下rz
cd /usr/share/fonts/chinese/TrueType
chmod 755 * 为字体赋予可执行权限
3.建立字体缓存
# mkfontscale (如果提示 mkfontscale: command not found,需自行安装 # yum install mkfontscale )
# mkfontdir
# fc-cache -fv (如果提示 fc-cache: command not found,则需要安装# yum install fontconfig )
4.reboot重启系统

02.将微软雅黑字体文件放在项目中

001.将字体文件放到项目中

002.根据项目中的字体文件获取字体Font的工具类。

package cn.picclife.mwx.salesupport.phoster.service.impl;import java.awt.Font;
import java.awt.FontFormatException;
import java.io.File;
import java.io.IOException;import cn.picclife.mwx.salesupport.marketactivity.util.ParsePDFUtil;/***
* @ClassName: FontUtil
* @Description: TODO(根据项目中的字体库,获取Font的工具类)
* @author yabo.liu
* @date 2018年9月25日 下午3:54:32
**/
public class FontUtil {/*** * @Title: getFont * @Description: TODO(根据项目字体库,获取Font) * @param @param size* @param @return    设定文件 * @return Font    返回类型 * @date 2018年9月25日 下午3:55:59* @throws*/public static Font getFont(float size,String path) {String caPath = ParsePDFUtil.class.getClassLoader().getResource("ca").getPath().toString();String fontPath = caPath + path;try {Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, new File(fontPath));dynamicFont = dynamicFont.deriveFont(size);return dynamicFont;}catch (FontFormatException e) {e.printStackTrace();}catch(IOException e){e.printStackTrace();}return null;}}

003.核心代码。

转载于:https://www.cnblogs.com/lyb0103/p/9732586.html

工作总结02(海报上传模块)相关推荐

  1. Nginx Upload Module 上传模块

    传统站点在处理文件上传请求时,普遍使用后端编程语言处理,如:Java.PHP.Python.Ruby等.今天给大家介绍Nginx的一个模块,Upload Module上传模块,此模块的原理是先把用户上 ...

  2. 【VUE项目实战】54、商品添加功能(四)-商品图片上传模块

    接上篇<53.商品添加功能(三)-商品参数及属性模块> 上一篇我们完成了商品参数和商品属性面板的开发,本篇我们来完成商品图片上传模块的开发. 一.要实现的效果 我们在商品图片页签,需要放置 ...

  3. apiclod 上传图片_apiCloud图片选择、处理、上传模块

    本地选择.缩放.裁剪.上传 图片 (效果优化,增加多点触控缩放 和 上传进度条显示 ,并且把截图的宽高封装成接口,通过页面参数传入) /*div{box-sizing:border-box;}*/*{ ...

  4. 前端 -> Plupload 一个Web浏览器上的界面友好的文件上传模块

    文章目录 方法列表: 属性集合: 事件集合:(up为uploader缩写) 实例: 方法列表: Uploader(setting):创建实例的构造方法 var uploader = new plupl ...

  5. 【工作笔记】文件上传下载时文件过大或请求过大

    异常信息 异常:org.springframework.web.util.NestedServletException : Request processing failed; nested exce ...

  6. 教你如何调用百度编辑器ueditor的上传图片、上传文件等模块

    出于兴趣爱好,前段时间自己尝试写了一个叫simple的cms,里面使用了百度ueditor编辑器,发现它的多图片上传模块很不错,用起来很方便,又可以选择已经上传好的图片.正好我又是个懒人,发现有现成的 ...

  7. node.js中multiparty模块的介绍和文件上传测试

    第一部分: multiparty模块是一个基于node.js的文件上传模块,模块中的方法和事件以及属性的介绍如下. 属性选项说明: encoding:设置输入表单字段的编码,默认为utf8. maxF ...

  8. NCBI|转录组原始数据上传

    数据上传NCBI系列又来啦!今天小编来为大家演示的是转录组原始数据上传NCBI哦~ 01.申请Biosample编号 1.首先我们需要进入NCBI网页https://www.ncbi.nlm.nih. ...

  9. B站Up主上传质量调优实践

    Up主上传的大量优质视频内容使得bilibili(B站)深受年轻用户的喜爱.bilibili视频云高级研发经理 唐君行在LiveVideoStack线上交流分享中详细介绍了B站为提供更流畅.稳定用户体 ...

  10. PHP实现多文件上传

    PHP文件上传流程 单击提交按钮,浏览器用户将包含上传文件的表单数据提交给PHP处理程序 Web服务器和PHP预处理器首先判断表单数据的大小是否超过php.ini配置文件中的post_max_size ...

最新文章

  1. linux 关闭磁盘检测,linux下检测磁盘状态
  2. P2285 [HNOI2004]打鼹鼠
  3. linux yum install和yum localinstall、rpm -ivh的区别
  4. java.lang.NoClassDefFoundError:如何解决–第2部分
  5. P8U8 最中听的话,不要做每件事都考虑太多。
  6. python面试题之如何在Python中创建自己的包
  7. 7-26 单词长度 (15 分) python实现
  8. 【图论】最短路学习笔记
  9. D3D中材质通过D3DMATERIAL9结构说明
  10. 【转】在Linux下编译与执行Java程序
  11. testNg官方文档
  12. C语言学习——初始C语言
  13. 使用Python PyQt5实现一个简单的图像识别软件
  14. #ardiuno #蓝牙 #if函数判断 #串口中米思齐
  15. 51单片机电子制作DIY-----交通灯控制器
  16. 如何用个人电脑打造量子模拟器
  17. let , const , var , 的区别
  18. 工业设计公司:从外观设计到软硬件设计
  19. PMP思维导图—项目经理的角色
  20. Shiro(一)之shiro简介与工作原理

热门文章

  1. 理财笔记 - 给朋友的建议
  2. 详解WAF与极风云WAF
  3. xshell 执行脚本API介绍(附带xsh的python包)
  4. 同步机制应遵循的准则
  5. 小程序 蓝牙连接(出现的问题和一些解决方法)
  6. 如何批量打印dwf文件
  7. 清华数为DWF低代码平台使用感悟
  8. 《OpenCv视觉之眼》Python图像处理三 :Opencv图像属性、ROI区域获取及通道处理
  9. zencart模板,外贸鞋子模板
  10. WTL 自绘控件库 (CQsEdit)