把html内容或者某个div的内容保存图片 类似与截图
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script type='text/javascript' src='https://cyimt.net/html2canvas.js'></script>
- <style>
- *{
- padding: 0;
- margin: 0;
- }
- html, body{
- width: 100%;
- height: 100%;
- }
- .btn-down{
- position: fixed;
- top: 0;
- left: 0;
- width: 15.2083vw;
- height:5.5185vh;
- font-size: 40px;
- border-radius: 0.9259vh;
- color: #fff;
- text-align: center;
- cursor: pointer;
- font-size: 5.3704vh;
- }
- .container{
- width: 100%;
- height: 100%;
- background: lightblue;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .container-inner{
- width: 80.7292vw;
- height: 30vh;
- background: pink;
- }
- .bookbox-inner-con {
- position: absolute;
- top: 42.3148vh;
- left: 23.75vw;
- right: 23.75vw;
- bottom: 31.0185vh;
- color: #B99858;
- font-weight: bold;
- font-family: Source Han Sans CN;
- }
- .bookbox-inner-con .inner-con-txt {
- font-size: 3.7037vh;
- text-align: center;
- padding: 0 2.5vw;
- }
- .bookbox-inner-con .inner-con-ks {
- margin-top:7.3704vh;
- margin-bottom: 1.5741vh;
- text-align: right;
- font-size: 2.8704vh;
-
- }
- .bookbox-inner-con .inner-con-time{
- text-align: right;
- font-size: 2.8704vh;
-
- }
-
- </style>
- </head>
- <body>
- <div class="btn-down" onclick="saveCertificateBook()">下载</div>
- <div class="container">
- <div class="container-inner" id="farmImage">
- <div class="bookbox-inner-con">
- <div class="inner-con-txt">恭喜您在本次测试中获得“优秀”特此颁发证书以示鼓励</div>
- <div class="inner-con-ks">《测试》</div>
- <div class="inner-con-time">2022 年 10月 10日</div>
- </div>
- </div>
- </div>
- <script>
- function saveCertificateBook(){
- var date = new Date();
- const canvasID = document.getElementById("farmImage");
- const rect=document.getElementById("farmImage").getBoundingClientRect()
- // 生成图片并上传到数据库保存
- html2canvas(canvasID, {
- scale: 0.5, // 数值越大生成的图片越清晰
- useCORS: true,
- allowTaint: true,
- y: 0, // 滚动条高度修复
- x: 0,
- allowTaint: true, //开启跨域
- useCORS: true,
- scrollX: 0,
- scrollY: rect.top, // 关键代码
- height: rect.height, // 加高度,避免截取不全
- }).then((canvas) => {
- let dataURL = canvas.toDataURL("image/jpeg"); // 拿到数据流
- var aLink = document.createElement("a"); // 创建一个a标签
- var blob = base64ToBlob(dataURL);
- var event = document.createEvent("HTMLEvents");
- event.initEvent("click", true, true);
- aLink.download = '证书' + date.getTime() + "." + blob.type.split("/")[1]; // 使用时间戳给文件命名
- aLink.href = URL.createObjectURL(blob);
- console.log(aLink.href )
- aLink.click();
- })
- }
- // base64转Blob对象
- function base64ToBlob(code) {
- var parts = code.split(";base64,");
- var contentType = parts[0].split(":")[1];
- var raw = window.atob(parts[1]);
- var rawLength = raw.length;
- var uint8Array = new Uint8Array(rawLength);
- for (var i = 0; i < rawLength; i++) {
- uint8Array[i] = raw.charCodeAt(i);
- }
- return new Blob([uint8Array], {type: contentType});
- }
- </script>
- </body>
- </html>