首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用画布90°ccw旋转div渲染的.png?

如何用画布90°ccw旋转div渲染的.png?
EN

Stack Overflow用户
提问于 2016-06-22 09:26:10
回答 2查看 1.6K关注 0票数 0

首先,我要说,我对使用画布元素很陌生。我已经得到了一个div,可以用jQuery和html2canvas.js渲染成png,但是我想逆时针旋转png 90度。

我假设我需要在画布阶段这样做,在将它作为一个png输出之前,即使在下载映像时,- how也会这样做吗?

这就是我现在得到的,正在工作(减去轮调)

代码语言:javascript
复制
html2canvas($("#portrait_back_div"), {
    onrendered: function (canvas) {
        //document.getElementById('canvas').appendChild(canvas);
        var data = canvas.toDataURL('image/png');

        var image = new Image();
        image.src = data;
        document.getElementById('portrait_back_png').appendChild(image);
        //$( "#portrait_back_div" ).hide();
    }
});

我很感激我能得到的任何帮助,尽管这似乎是一个基本的问题。这把小提琴的工作原理与我的项目基本相同,你想看一看。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-22 10:58:02

您必须创建一个新的画布,然后转换到中心,将原点移动到中心(这里的功能是旋转的枢轴),然后旋转然后绘制图像。

最后从旋转的画布中提取图像。

示例

代码语言:javascript
复制
html2canvas($("#portrait_back_div"), {
  onrendered: function (canvas) {

    // create intermediate canvas
    var rotCanvas = document.createElement("canvas");

    // swap width and height
    rotCanvas.width = canvas.height;
    rotCanvas.height = canvas.width;

    // get context
    var rctx = rotCanvas.getContext("2d");

    // translate to center (rotation pivot)
    rctx.translate(rotCanvas.width * 0.5, rotCanvas.height * 0.5);

    // rotate -90° (CCW)
    rctx.rotate(-Math.PI * 0.5);

    // draw image offset so center of image is on top of pivot
    rctx.drawImage(canvas, -canvas.width * 0.5, -canvas.height * 0.5);

    // extract image from rotate canvas
    var data = rotCanvas.toDataURL('image/png');

    var image = new Image();
    image.src = data;
    document.getElementById('portrait_back_png').appendChild(image);
    //$( "#portrait_back_div" ).hide();
  }
});

代码语言:javascript
复制
// proof-of-concept example
var img = new Image;
img.onload = function() {
  var rotCanvas = document.createElement("canvas");
  var rctx = rotCanvas.getContext("2d");
  rotCanvas.width = this.height;
  rotCanvas.height = this.width;
  rctx.translate(rotCanvas.width * 0.5, rotCanvas.height * 0.5);
  rctx.rotate(-Math.PI * 0.5);
  rctx.drawImage(this, -this.width * 0.5, -this.height * 0.5);
  document.body.appendChild(this);
  document.body.appendChild(rotCanvas)
};
img.src = "//i.imgur.com/YqeJUhl.jpg?1";
代码语言:javascript
复制
<h4>Original on top, rotated canvas at bottom</h4>

票数 6
EN

Stack Overflow用户

发布于 2016-06-22 09:30:15

在所呈现的结尾添加:

代码语言:javascript
复制
image.style.transform = "rotate(90deg)";

您需要更多的转换以使其跨浏览器工作。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37963855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档