javascript - 在加载图像、裁剪图像并将其绘制到 Canvas 上之后,如何允许用户在 base64 转换之前旋转图像?

标签 javascript jquery html css canvas

我裁剪成正方形并将图像绘制到 Canvas

    if(img.height >= img.width) {
        ctx.drawImage(img, 0, 0, 110, 110 * img.height / img.width);
    } else {
        ctx.drawImage(img, 0 , 0, 110 * img.width / img.height, 110);
    }

绘制图像后,我使用 canvas.toDataURL(); 转换为 base64 并 POST 到服务器。

但是在我转换和 POST 之前,我希望允许用户在将图像转换为 base64 之前将其旋转 90 度。

我有一个测试设置 HERE

最佳答案

以下是在临时 Canvas 上旋转裁剪图像的方法:

然后你可以为你的 POST 做 tempCanvas.toDataURL。

  • 创建一个临时的屏幕外 Canvas
  • 调整临时 Canvas 的大小以适应调整大小+旋转的图像
  • 翻译到临时 Canvas 的中间
  • 旋转90度
  • 在临时 Canvas 上绘制调整大小的图像

演示:http://jsfiddle.net/m1erickson/VrV38/

enter image description here

示例代码:

// create a temporary canvas

var tempCanvas=document.createElement('canvas');
var tempCtx=tempCanvas.getContext('2d');

// resize the tempCanvas

tempCanvas.width=h;
tempCanvas.height=w;

// translate+rotate and draw the resized image to tempCanvas

tempCtx.translate(h/2,w/2);
tempCtx.rotate(Math.PI/2);
tempCtx.drawImage(canvas, 0,0,w,h, -w/2,-h/2,w,h);

关于javascript - 在加载图像、裁剪图像并将其绘制到 Canvas 上之后,如何允许用户在 base64 转换之前旋转图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20378519/

相关文章:

javascript - 如何获取div的非溢出内容的长度

jquery - 从 json 文件中提取数据以在 Jquery 中的 .$post 中使用

javascript - jQuery 多 ID 选择器通过变量连接

javascript - 从 jquery 对话框刷新父页面

javascript - 为我的 laravel 应用程序预览/放大/缩放图像 api

javascript - 使用 HTML 和 JavaScript 创建一个 Linux 终端主题网站

javascript - 如何在html中输出javascript变量的值?

javascript - 一个接一个改变多个div的颜色

javascript - 如何获得全屏背景视频英雄?

jquery - 视差 float 图像 <div>