网页截图和svg模版动态生成图片Java实现

使用场景

需要Java语言动态生成图片

用流程图简单说明下我这边工作中使用的场景

仅供参考


所以这里就需要生成证书了

我先给大家看下最终实现的图片效果


这里要先说明一下

  • 图片上的文字都是动态变化的即不同的订单对应的图片内容都不一样

  • 图片上还可以嵌入图片哦 比如上图的logo图片

下面说下我是如何解决的

通过PhantomJS来实现

这种方式是不能实现这个需求的

这个的原理就是对网页截图 但只能对于静态页面截图 不能根据不同的参数值动态生成图片

所以不提倡使用这种方式

但也介绍下这种使用方式 朋友们根据自己的实际需求情况有选择的使用

通过html代码实现图片的效果 放入web容器(比如nginx)中部署

这是h5代码

test文件夹下面的内容

安装一个docker nginx 将test文件夹加载到nginx容器的/usr/share/nginx/html目录下面

docker run --name nginx80  -p 8000:80  -v /tmp/test:/usr/share/nginx/html -d docker.io/nginx

访问的页面效果


访问该页面进行截图


这张图片是截图生成的图片 但url中的id值并没有传给页面

在h5代码中请求后端接口获取数据动态显示出来也是不可以的

所以这种方式使用局限性很窄

简单介绍下代码原理


大致原理是 通过http请求该url获取该url的文件流然后解析h5代码生成图片

通过SVG模版动态生成

先写svg模版(其实也是h5代码)


读取svg模版 动态传入参数生成图片


其实现原理大致为 读取svg document h5代码 将动态参数map解析到h5代码中 转换成字节数组 生成图片格式

Linux环境图片中文乱码

我本地是mac系统没有这个问题 在发布到测试环境linux系统出现了这个问题

先看下问题的现象


看到了没 生成的图片中文全是乱码

原因是因为linux系统没有中文字体

既然linux系统没有中文字体 那么就安装它嘛 let's 盘它!!!

先看下mac环境的字体情况

  • 安装字体管理工具
brew install fontconfig
  • 查看支持中文
fc-list :lang=zh    (注意‘:’前的空格)

mac环境默认会安装很多中文字体

再看下linux环境

  • 安装字体管理工具
yum -y install fontconfig
  • 查看支持中文
fc-list :lang=zh

果然没有中文字体

开始安装中文字体

将mac环境的宋体上传到linux环境

a 先在mac系统中找到字体安装目录

/System/Library/Fonts

b 找到宋体对应的文件


c 将该文件上传到linux指定的目录下

/usr/share/fonts/chinese

d 赋予文件夹操作权限

chmod -R 755 /usr/share/fonts/chinese

e 安装ttmkfdir来搜索目录中所有的字体信息,并汇总生成fonts.scale文件

yum -y install ttmkfdir

ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir

修改字体配置文件

vi /etc/fonts/fonts.conf添加<dir>/usr/share/fonts/chinese</dir>

刷新内存中的字体缓存

fc-cache

确认是否安装成功


在jdk中安装该宋体

a 找到jdk所在的安装目录

echo $JAVA_HOME 

b 将宋体文件复制过来

cp /usr/share/fonts/chinese/STHeiti\ Light.ttc /usr/local/software/jdk1.8.0_141/jre/lib/fonts/fallback

fallback代表存放后备语言的文件夹

重启java服务即可

DEMO代码

https://gitee.com/pingfanrenbiji/resource/tree/master/image

注意: 引入的依赖问题

  <!--phantomjs -->  <dependency>   <groupId>org.seleniumhq.selenium</groupId>   <artifactId>selenium-java</artifactId>   <version>2.53.1</version>  </dependency>  <dependency>   <groupId>com.github.detro</groupId>   <artifactId>ghostdriver</artifactId>   <version>2.1.0</version>  </dependency>

  <!--svg-->  <dependency>   <groupId>com.github.hui.media</groupId>   <artifactId>svg-core</artifactId>   <version>2.5</version>  </dependency>

这些依赖jar包我是上传到了公司的私服上了

若是朋友们下拉不下来

我提供给大家这些底层jar包的实现源码

https://gitee.com/pingfanrenbiji/quick-media

自行上传到自己的私服即可

网页截图和svg模版动态生成图片Java实现相关推荐

  1. 利用java调用谷歌浏览器驱动进行网页截图

    最近做项目,需要用到截图的功能,就是给一个url地址,然后自动打开,截取出一个封面图片,保存到服务器上.前端有js可以支持截图,像phantomjs等js插件都可以实现,但是效果不是很好,有些页面渲染 ...

  2. java web 截图_如何以Java实现网页截图技术

    今天看到某网友关于"如何以Java实现网页截图技术"的咨询帖,由于出现该咨询的地点非常不适合较长回复,故以博文形式回答. 事实上,如果您想以Java实现网页截图,也就是" ...

  3. java根据pdf模版动态生成pdf

    java根据pdf模版动态生成pdf packagecom.utils;importjava.io.ByteArrayOutputStream;importjava.io.File;importjav ...

  4. java url 缩略图_java根据url生成网页截图,缩略图 | 学步园

    public class ShotsPic extends JPanel { private static final long serialVersionUID = 1L; // 行分隔符 fina ...

  5. Java phantomjs 网页截图

    简介 根据传入的url对网页进行截图.打开网页和截取图片通过软件phantomjs.exe在后台静默完成.注:该过程不需要打开浏览器 优点: 1.该软件支持多个平台,包括Linux,Windows. ...

  6. java网页截图_java-selenium 实现网页截图

    使用firefox浏览器无头模式在内存里渲染页面,然后用selenium操作浏览器并解析截图.需要安装firefox(也支持chrome),然后下载firefox 驱动 详见:https://gith ...

  7. 如何以Java实现网页截图技术

    今天看到某网友关于"如何以Java实现网页截图技术"的咨询帖,由于出现该咨询的地点非常不适合较长回复,故以博文形式回答. 事实上,如果您想以Java实现网页截图,也就是" ...

  8. html网页截图功能支持svg图片保存

    根据自己的需求选取对应代码片段,可以节省50%的时间. 现在用到最多的页面截取插件就是html2canvas.将页面转化为canvas进行保存 但是为了兼容支持svg页面的截图,会先将svg页面转化成 ...

  9. 网页截图工具CutyCapt

    网页截图工具CutyCapt CuteCapt是Kali Linux提供的一款网页截图工具.该工具运行在命令行中,可以将WebKit引擎解析的网页保存为图片.它保存的文件支持矢量图和位图两大类型,共1 ...

最新文章

  1. php中mvc控制器作用,理解PHP中的MVC编程之控制器
  2. 《快学 Go 语言》第 5 课 —— 神奇的切片
  3. Loadrunner检查点使用总结
  4. 六、爬虫中重要的解析库xpath和BeautifulSoup
  5. C# Owin 创建与测试自己的中间件Middleware
  6. 1.1图像处理的概念
  7. 阿里云centos 安装和配置 DokuWiki
  8. OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能...
  9. 单向关系中的JoinColumn
  10. c语言系统关键词有哪些,C语言的那些关键字
  11. unigui web app之title buttons
  12. 免费的WordPress Video Player插件
  13. 图片默认底部3px缝隙
  14. 自动驾驶 4-5 自行车模型的横向动力学 Lateral Dynamics of Bicycle Model
  15. chrome更新到80以上版本后,带来的跨域请求cookie丢失问题
  16. 激活硬盘被关闭的DMA模式
  17. 身份证里提取出生年月的方法(实用)
  18. linux-块设备简单总结
  19. BZOJ1064【NOI2008】【假面舞会】
  20. java设计一个user类_关于JAVA设计一个用户类

热门文章

  1. mysql bin值总是变化_MySQL|update字段为相同的值是否会记录binlog
  2. leetcode mysql 排名_GitHub - nimphy/leetcode-Mysql
  3. python在windows上安装_在Windows上安装Python | 严佳冬
  4. 《OpenStack云计算实战手册(第2版)》——1.4 安装OpenStack身份认证服务
  5. 个人作业-Week1
  6. 33 windows_33_Proc_windows_job 进程,windows作业
  7. jQuery 对象与Dom 对象互转
  8. DedeCMS Error:Tag disabled:php的解决办法
  9. 一段话系列-正则基础
  10. 手动实现bind函数(附MDN提供的Polyfill方案解析)