工作总结02(海报上传模块)
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(海报上传模块)相关推荐
- Nginx Upload Module 上传模块
传统站点在处理文件上传请求时,普遍使用后端编程语言处理,如:Java.PHP.Python.Ruby等.今天给大家介绍Nginx的一个模块,Upload Module上传模块,此模块的原理是先把用户上 ...
- 【VUE项目实战】54、商品添加功能(四)-商品图片上传模块
接上篇<53.商品添加功能(三)-商品参数及属性模块> 上一篇我们完成了商品参数和商品属性面板的开发,本篇我们来完成商品图片上传模块的开发. 一.要实现的效果 我们在商品图片页签,需要放置 ...
- apiclod 上传图片_apiCloud图片选择、处理、上传模块
本地选择.缩放.裁剪.上传 图片 (效果优化,增加多点触控缩放 和 上传进度条显示 ,并且把截图的宽高封装成接口,通过页面参数传入) /*div{box-sizing:border-box;}*/*{ ...
- 前端 -> Plupload 一个Web浏览器上的界面友好的文件上传模块
文章目录 方法列表: 属性集合: 事件集合:(up为uploader缩写) 实例: 方法列表: Uploader(setting):创建实例的构造方法 var uploader = new plupl ...
- 【工作笔记】文件上传下载时文件过大或请求过大
异常信息 异常:org.springframework.web.util.NestedServletException : Request processing failed; nested exce ...
- 教你如何调用百度编辑器ueditor的上传图片、上传文件等模块
出于兴趣爱好,前段时间自己尝试写了一个叫simple的cms,里面使用了百度ueditor编辑器,发现它的多图片上传模块很不错,用起来很方便,又可以选择已经上传好的图片.正好我又是个懒人,发现有现成的 ...
- node.js中multiparty模块的介绍和文件上传测试
第一部分: multiparty模块是一个基于node.js的文件上传模块,模块中的方法和事件以及属性的介绍如下. 属性选项说明: encoding:设置输入表单字段的编码,默认为utf8. maxF ...
- NCBI|转录组原始数据上传
数据上传NCBI系列又来啦!今天小编来为大家演示的是转录组原始数据上传NCBI哦~ 01.申请Biosample编号 1.首先我们需要进入NCBI网页https://www.ncbi.nlm.nih. ...
- B站Up主上传质量调优实践
Up主上传的大量优质视频内容使得bilibili(B站)深受年轻用户的喜爱.bilibili视频云高级研发经理 唐君行在LiveVideoStack线上交流分享中详细介绍了B站为提供更流畅.稳定用户体 ...
- PHP实现多文件上传
PHP文件上传流程 单击提交按钮,浏览器用户将包含上传文件的表单数据提交给PHP处理程序 Web服务器和PHP预处理器首先判断表单数据的大小是否超过php.ini配置文件中的post_max_size ...
最新文章
- linux 关闭磁盘检测,linux下检测磁盘状态
- P2285 [HNOI2004]打鼹鼠
- linux yum install和yum localinstall、rpm -ivh的区别
- java.lang.NoClassDefFoundError:如何解决–第2部分
- P8U8 最中听的话,不要做每件事都考虑太多。
- python面试题之如何在Python中创建自己的包
- 7-26 单词长度 (15 分) python实现
- 【图论】最短路学习笔记
- D3D中材质通过D3DMATERIAL9结构说明
- 【转】在Linux下编译与执行Java程序
- testNg官方文档
- C语言学习——初始C语言
- 使用Python PyQt5实现一个简单的图像识别软件
- #ardiuno #蓝牙 #if函数判断 #串口中米思齐
- 51单片机电子制作DIY-----交通灯控制器
- 如何用个人电脑打造量子模拟器
- let , const , var , 的区别
- 工业设计公司:从外观设计到软硬件设计
- PMP思维导图—项目经理的角色
- Shiro(一)之shiro简介与工作原理