# html_to_image **Repository Path**: obear997/html_to_image ## Basic Information - **Project Name**: html_to_image - **Description**: 前端实现html转图片的解决方案,本案例提供了3中解决方案 - **Primary Language**: JavaScript - **License**: MulanPSL-1.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-07-30 - **Last Updated**: 2022-04-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # html页面转换成图片 把html转化为图片可以有3种方案: - canvas - dom-to-image - html2canvas # canvas绘制网络图片报错(跨域) canvas绘制网络图片时出现下面的报错,具体原因如下: canvas.toDataURL在将网络图片地址进行本地输出会因为不同源而出现跨域问题,解决办法给img添加一个crossOrigin 属性,值为anonymous。 ![canvas绘制网络图片报错](./file/01.png) # canvas `canvas 绘制的图片模糊原因:` canvas 绘图时,会从两个物理像素的中间位置开始绘制并向两边扩散 0.5 个物理像素。当设备像素比为 1 时,一个 1px 的线条实际上占据了两个物理像素(每个像素实际上只占一半),由于不存在 0.5 个像素,所以这两个像素本来不应该被绘制的部分也被绘制了,于是 1 物理像素的线条变成了 2 物理像素,视觉上就造成了模糊。 `canvas 绘制的图片模糊解决办法:` canvas 标签中的 width 和 height 属性并不是 css 中的宽高,而是 canvas 绘图上下文(绘图区域)的宽高,当不设置 canvas 的 css 宽高时,canvas 会将 width 和 height 的值作为 css 宽高,而 css 宽高是元素在页面上的可见大小。 属性 `devicePixelRatio` 能够返回当前显示设备的物理像素分辨率与 CSS 像素分辨率的比率。此值也可以解释为像素大小的比率:一个 CSS 像素的大小与一个物理像素的大小的比值。简单地说,这告诉浏览器应该使用多少个屏幕的实际像素来绘制单个 CSS 像素。 canvas 绘制的图片模糊的最终解决办法是:获取到`devicePixelRatio`,将canvas的css宽度、高度设置为canvas 标签中的 width 和 height 的`devicePixelRatio`倍,在绘制的过程中对于字体大小、宽高、位置等尺寸都乘以`devicePixelRatio`。 # dom-to-image Github:https://github.com/tsayen/dom-to-image dom-to-image是一个插件库可以将任意DOM节点转换成用JavaScript编写的矢量(SVG)或栅格(PNG或JPEG)图像,对于px、rem和em的单位都支持。 兼容性: | 浏览器 | 是否支持 | 不支持的原因 | | --- | --- | --- | | Chrome | 是 | | | Firefox | 是 | | | IE | 否 | 它不支持SVG < nobject >标记 | | Safari | 否 | 对< nobject >标签使用了更严格的安全模型。建议使用toSvg并在服务器上呈现。 | # html2canvas 官网:[http://html2canvas.hertzen.com/?utm_source=caibaojian.com](http://html2canvas.hertzen.com/?utm_source=caibaojian.com) Github:[https://github.com/niklasvh/html2canvas](https://github.com/niklasvh/html2canvas) html2canvas将html转成图片,可以npm引入,也可以使用直接引入js文件。对于尺寸单位是px的生成图片清晰,但是对于单位是rem的,生成的图片中有一大片的空白,(绘制的内容没有占满整个canvas),虽然可以通过自定义width和height生成画布一样大的图片,但是图片有些模糊,所以如果可以将rem转成px或者em去生成图片。 兼容性: | 支持的浏览器 | | --- | | Google Chrome 、Firefox 3.5+ 、Opera 12+、IE9+、Safari 6+ |