收藏
回答

canvas绘制完成如何旋转图片?

页面竖屏,canvas竖屏,但是用户横屏绘制(页面还是竖屏),然后我保存图片 需要给他转90°然后上传,请问怎么旋转呢?

回答关注问题邀请回答
收藏

4 个回答

  • 要的就是
    要的就是
    2020-05-07

    可以这样尝试下,在拿到用户的图片数据后,创建另一个 canvas,使用 CanvasContext.rotate(number rotate)

    绘制旋转90度后的图片。在获取旋转后的图片。

    2020-05-07
    有用 2
    回复 3
    • 王宗荣
      王宗荣
      2020-05-08
      是的,目前是这样做的,麻烦了一点
      2020-05-08
      回复
    • 宗宗宗
      宗宗宗
      2020-12-14回复王宗荣
      你好可以问一下 旋转图片的方法具体怎么实现的吗
      2020-12-14
      回复
    • 梁大新🍃
      梁大新🍃
      2022-08-28
      可以的,就是要单独创建canvas旋转后得到新的图片路径
      2022-08-28
      回复
  • 影沉寒水
    影沉寒水
    03-14

    

    import { Button, Canvas } from "@tarojs/components";
    import {
      canvasToTempFilePath,
      createCanvasContext,
      getFileSystemManager,
    } from "@tarojs/taro";
    import { useEffect } from "react";
    
    
    const canvasWidth = 100;
    const canvasHeight = 300;
    
    
    const CanvasRotate = () => {
      useEffect(() => {
        const ctx = createCanvasContext("canvas1");
        ctx.strokeRect(10, 10, 25, 15);
        ctx.scale(2, 2);
        ctx.strokeRect(10, 10, 25, 15);
        ctx.scale(2, 2);
        ctx.strokeRect(10, 10, 25, 15);
        ctx.draw();
      }, []);
      return (
        <>
          <Canvas
            canvasId='canvas1'
            id='canvas1'
            style={{
              border: "2rpx solid #000",
              width: canvasWidth,
              height: canvasHeight,
            }}
          />
          <Canvas
            canvasId='canvas2'
            id='canvas2'
            style={{
              border: "2rpx solid red",
              width: canvasHeight,
              height: canvasWidth,
            }}
          />
          <Button
            onClick={() => {
              canvasToTempFilePath({
                canvasId: "canvas1",
                success(res) {
                  const canvas2Context = createCanvasContext("canvas2");
                  canvas2Context.transform(1, 0, 0, 1, 0, canvasWidth);
                  canvas2Context.rotate(-(90 * Math.PI) / 180);
                  canvas2Context.drawImage(
                    res.tempFilePath,
                    0,
                    0,
                    canvasWidth,
                    canvasHeight
                  );
                  canvas2Context.draw(false, () => {
                    return canvasToTempFilePath({
                      canvasId: `canvas2`,
                      success: (ress) => {
                        const base64url =
                          "data:image/png;base64," +
                          getFileSystemManager().readFileSync(
                            ress.tempFilePath,
                            "base64"
                          );
                        console.log(base64url, "base64url");
                      },
                      fail: (err) => {
                        console.log(err, "err");
                      },
                    });
                  });
                },
                fail: function (err) {
                  console.log("fail-downloadFile", err);
                },
              });
            }}
          >
            旋转90deg
          </Button>
        </>
      );
    };
    
    
    export default CanvasRotate;
    
    
    
    03-14
    有用
    回复
  • 济南千乐网络科技有限公司
    济南千乐网络科技有限公司
    2020-05-07

    没搞过呢还

    2020-05-07
    有用
    回复
  • 默
    2020-05-07

    小程序暂时不支持动态修改横竖屏

    2020-05-07
    有用
    回复
登录 后发表内容
问题标签