将html转为图片

① jquery库(看个人需要):
②dom-to-image.js: https://github.com/tsayen/dom-to-image
③FileSaver.js:https://github.com/eligrey/FileSaver.js

<html>
<head>
<script type="text/javascript" src="C:/Users/liushuofu/Desktop/jquery-1.6.4.min.js"></script>
<script type="text/javascript" src="C:/Users/liushuofu/Desktop/dom-to-image.js"></script>
<script type="text/javascript" src="C:/Users/liushuofu/Desktop/FileSaver.js"></script>

  <script type="text/javascript">
  $(function(){
      //
      $("#btn").click(function(){
      //插入图片到html
      // var node = document.getElementById('table');
      //     domtoimage.toPng(node)
      //               .then(function (dataUrl) {
      //                   console.log(dataUrl)
      //                   var img = new Image();
      //                   img.src = dataUrl;
      //                   document.body.appendChild(img);
      //               });


      // 下载png图片
      domtoimage.toBlob(document.getElementById('table'))
          .then(function (blob) {
              console.log(blob)
              window.saveAs(blob, 'my-node.png');
          });


      // 下载jpeg图片
      // domtoimage.toJpeg(document.getElementById('my-node'), { quality: 0.95 })
      //           .then(function (dataUrl) {
      //               var link = document.createElement('a');
      //               link.download = 'my-image-name.jpeg';
      //               link.href = dataUrl;
      //               link.click();
      //           });  

      // var node = document.getElementById('table');
      // domtoimage.toPixelData(node)
      //     .then(function (pixels) {
      //         for (var y = 0; y < node.scrollHeight; ++y) {
      //           for (var x = 0; x < node.scrollWidth; ++x) {
      //             pixelAtXYOffset = (4 * y * node.scrollHeight) + (4 * x);
      //             /* pixelAtXY is a Uint8Array[4] containing RGBA values of the pixel at (x, y) in the range 0..255 */
      //             pixelAtXY = pixels.slice(pixelAtXYOffset, pixelAtXYOffset + 4);
      //           }
      //         }
      //     });    
  })
  })
  </script>
</head>
<body>
  <input type="button" id="btn" value="do it" />
  <h4>两行三列:</h4>
  <table id="table" border="1" style="width:200px;border-collapse: collapse;border:1px solid black;">
      <tr style="background:green;">
        <td rowspan="3">200</td>
        <td>200</td>
        <td>300</td>
      </tr>
      <tr style="background:green;">
        <td rowspan="2">500</td>
        <td>600</td>
      </tr>
      <tr style="background:green;">
        <td>600</td>
      </tr>
      <tr style="background:skyblue;">
        <td rowspan="3">100</td>
        <td>200</td>
        <td>300</td>
      </tr>
      <tr style="background:skyblue;">
        <td>500</td>
        <td>600</td>
      </tr>
      <tr style="background:skyblue;">
        <td>600</td>
        <td>600</td>
      </tr>
  </table>
</body>
</html>

另一种写法 引入html2canvas.js

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>htmltopic</title>
    <script type="text/javascript" src="/h5/js/jquery-1.11.0.min.js"></script>
    <script type="text/javascript" src="js/html2canvas.min.js"></script>
    <style>
        * {
            margin: 0;
        }
 
 
        .test {
            width: 100px;
            height: 100px;
            text-align: center;
            line-height: 100px;
            background-color: #87CEEB;
            display: inline-block;
            vertical-align: top;
        }
 
 
        canvas {
            margin-right: 5px;
        }
 
 
        .down {
            float: left;
            margin: 40px 10px;
        }
        .down2 {
            float: left;
            margin: 40px 30px;
        }
    </style>
</head>
<body>
 
 
    <div class="test">测试</div>
<div><a class="down" href="" download="downImg">下载</a>
</div>
    <div><a class="down2" href="" download="downImg">下载2</a></div>
<script>
    //直接选择要截图的dom,就能截图,但是因为canvas的原因,生成的图片模糊
    //html2canvas(document.querySelector('div')).then(function(canvas) {
    //    document.body.appendChild(canvas);
    //});
    //创建一个新的canvas
    var canvas2 = document.createElement("canvas");
    let
    _canvas = document.querySelector('div');
    var w = parseInt(window.getComputedStyle(_canvas).width);
    var h = parseInt(window.getComputedStyle(_canvas).height);
    //将canvas画布放大若干倍,然后盛放在较小的容器内,就显得不模糊了
    canvas2.width = w * 2;
    canvas2.height = h * 2;
    canvas2.style.width = w + "px";
    canvas2.style.height = h + "px";
    //可以按照自己的需求,对context的参数修改,translate指的是偏移量
    //  var context = canvas.getContext("2d");
    //  context.translate(0,0);
    var context = canvas2.getContext("2d");
    context.scale(2, 2);
    html2canvas(document.querySelector('div'), { canvas: canvas2 }).then(function(canvas) {
        //document.body.appendChild(canvas);
        //canvas转换成url,然后利用a标签的download属性,直接下载,绕过上传服务器再下载
        document.querySelector(".down").setAttribute('href', canvas.toDataURL());
    });
</script>
 
 
<script language="javascript">
    //这是另一种写法
    $(function () {
        $(".down2").click(function () {
            html2canvas($(".test")).then(function (canvas) {
                var imgUri = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream"); // 获取生成的图片的url
                window.location.href = imgUri; // 下载图片
            });
 
 
            //html2canvas($('.tongxingzheng_bg'), {
            //    onrendered: function (canvas) {
            //        var data = canvas.toDataURL("image/png");//生成的格式
            //        //data就是生成的base64码啦
            //        alert(data);
            //    }
            //});
        });
    });
</script>
</body>
</html>

 

在 Java 中,将 HTML 换为图片可以通过多种方式实现。最常见的方式是使用外部库来渲染 HTML 内容,然后将其截图保存为图片格式(如 PNG 或 JPEG)。常用的库包括: - `java.awt.Desktop`(受限) - `javax.swing.JEditorPane`(简单 HTML 支持) - **`wkhtmltox`**(高性能,使用原生浏览器渲染) - **`Selenium` + `WebDriver`**(自动化浏览器截图) - **`Flying Saucer` + `iText`**(适合生成 PDF,但也能截图) - **`Thymeleaf` + `OpenHTMLToImage`** 下面我展示一种比较常用且功能强大的方案:使用 **OpenHTMLToImage**(原名 html2image) 来将 HTML 换为图片。 --- ### ✅ 使用 `openhtmltoimage` 库将 HTML 换为图片 #### 添加 Maven 依赖: ```xml <dependency> <groupId>io.github.axolotl995</groupId> <artifactId>openhtmltoimage</artifactId> <version>1.0.3</version> </dependency> ``` #### Java 示例代码: ```java import org.openhtmltopdf.extend.FSDOMDocumentContext; import org.openhtmltopdf.pdfboxout.PdfRendererBuilder; import org.openhtmltopdf.swing.Preloader; import org.openhtmltopdf.util.XRLog; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; public class HtmlToImage { public static void main(String[] args) throws Exception { String html = "<html><body style='font-family: sans-serif;'>" + "<h1>Hello, World!</h1>" + "<p>This is a sample HTML to image conversion.</p>" + "</body></html>"; // 设置日志级别 XRLog.setLoggingEnabled(false); // 创建图片 BufferedImage image = renderHtmlToImage(html); // 保存图片到文件 File outputFile = new File("output.png"); ImageIO.write(image, "png", outputFile); System.out.println("图片已保存至: " + outputFile.getAbsolutePath()); } public static BufferedImage renderHtmlToImage(String html) throws Exception { // 使用 OpenHTMLToImage 渲染 HTML 到图像 Preloader preloader = new Preloader(); FSDOMDocumentContext context = preloader.preloadFromString(html, null); BufferedImage bufferedImage = new BufferedImage(800, 600, BufferedImage.TYPE_INT_ARGB); context.render(0, bufferedImage.createGraphics(), bufferedImage.getWidth(), bufferedImage.getHeight()); return bufferedImage; } } ``` --- ### ✅ 代码解释: 1. **HTML 字符串**:我们定义了一个简单的 HTML 片段作为输入。 2. **OpenHTMLToImage**:该库基于浏览器渲染引擎(类似 WebKit),可以渲染现代 HTML/CSS。 3. **BufferedImage**:用于保存渲染后的图像。 4. **ImageIO.write**:将图像写入本地文件系统,格式为 PNG。 5. **XRLog.setLoggingEnabled(false)**:关闭日志输出,使控制台更干净。 --- ### ✅ 输出结果: 运行后将在项目根目录下生成 `output.png`,内容就是你写的 HTML 渲染后的图像。 --- ### ✅ 其他替代方案(简要说明): | 方案 | 描述 | 优点 | 缺点 | |------|------|------|------| | `JEditorPane` | Java 自带组件,可渲染简单 HTML | 不依赖外部库 | 只支持 HTML3/CSS1 | | `wkhtmltoimage` | 使用命令行调用 wkhtmltoimage | 高质量、支持现代 CSS | 需要安装 native 依赖 | | `Selenium` | 自动化浏览器截图 | 支持 JS、动态内容 | 依赖浏览器环境 | | `Flying Saucer` | 常用于生成 PDF,但可截图 | 纯 Java | 对现代 CSS 支持有限 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值