画布旋转功能可创建空白图像

问题描述 投票:0回答:1

嗨,我正在使用canvas和base64字符串调整大小和压缩图像

这是完整的代码

function preview_image(event)
{
    var fileReader = new FileReader();
    fileReader.onload = function (event)
    {
        var image = new Image();
        image.onload=function()
        {
            var canvas=document.createElement("canvas");
            var context=canvas.getContext("2d");
            canvas.width=600;
            canvas.height=canvas.width*image.height/image.width; /*For Aspect ratio*/

            context.rotate(90 * Math.PI/180); // rotate by 90 degrees

context.drawImage(image,0,0,image.width,image.height,0,0,canvas.width,canvas.height);

            var jpgurl=canvas.toDataURL('image/jpeg', 0.5);

        }

    };

}

我想将图像旋转到90度,但在使用jpgurl创建图像后,输出图像仍然没有旋转和空白

jquery html5-canvas image-manipulation exif-js
1个回答
1
投票

旋转的图像在屏幕外。如果要围绕其中心旋转图像,请尝试以下操作:

function preview_image(event)
{
    var fileReader = new FileReader();
    fileReader.onload = function (event)
    {
        var image = new Image();
        image.onload=function()
        {
            var canvas=document.createElement("canvas");
            var context=canvas.getContext("2d");
            canvas.width=600;
            canvas.height=canvas.width*image.height/image.width; /*For Aspect ratio*/

            // First move the origin (0,0) to the middle of the canvas
            context.translate(canvas.width/2, canvas.height/2)

            context.rotate(90 * Math.PI/180); // rotate by 90 degrees

            // And also draw the Image centered on the origin
            context.drawImage(image, -image.width/2, -image.height/2, image.width/2, image.height/2, 0, 0, canvas.width, canvas.height);


            var jpgurl=canvas.toDataURL('image/jpeg', 0.5);

        }

    };

}

有两个变化:

1)在旋转画布之前翻译原点

context.translate(canvas.width/2, canvas.height/2)

2)以中心位于原点顶部绘制图像。

context.drawImage(image, -image.width/2, -image.height/2,
 image.width/2, image.height/2, 0, 0, canvas.width, canvas.height);

请记住,画布将保持旋转状态,其原点将位于其中心。如果你想回去,你可以在context.save()之前放置一个translate,在context.restore()之后放置一个drawImage

© www.soinside.com 2019 - 2024. All rights reserved.