【发布时间】:2019-08-14 15:41:59
【问题描述】:
我有一个用 javascript 编写的函数,它使用 canvas
将图像旋转给定的输入度数我不知道该尝试什么来提高图像质量。
在下面给出的这个函数中,我将第一个参数作为 base64 图像,第二个参数是图像应该旋转的程度,第三个参数是回调函数。 p>
//code for rotating image.
export const rotateImage = (imageBase64, rotation, cb) => {
var img = new Image();
img.src = imageBase64;
img.onload = () => {
var canvas = document.createElement("canvas");
canvas.width = img.height;
canvas.height = img.width;
var ctx = canvas.getContext("2d");
ctx.translate( Math.floor(img.height/2),Math.floor(img.width/2));
ctx.rotate(rotation * (Math.PI / 180));
ctx.drawImage(img, -img.width / 2, -img.height / 2);
cb(canvas.toDataURL("image/jpeg"))
};
};
预期结果:我希望图像在不损失图像质量的情况下旋转。
实际结果:旋转 550kb 大小的图像后,它会返回 80kb 大小的图像。 图像质量急剧下降。 如何旋转这个图像,如果我将一个 550kb 的图像旋转 90 度,旋转图像的质量也是 550kb?
感谢您的宝贵时间。 真的很感激。
【问题讨论】:
-
使用css可能更容易,质量不会改变
-
不幸的是 jpeg 是一种有损格式。只是修改并重新保存您可能会丢失质量的文件
-
我想将输入作为 base64 图像并将输出作为旋转 90 度的 base 64 图像返回。它不适用于在网页中查看。但我希望输出为不损失图像质量的旋转图像。欢迎任何建议。感谢您尝试帮助我。
-
海普子,有没有办法旋转图像并以相同的质量保存?或者至少比我目前得到的质量更高?还是我可以采取任何其他方法来解决这个问题?谢谢你 phuzi。
-
还有将 EXIF 数据添加到图像的解决方案,您可以在其中旋转图像的方向。并非在所有情况下都有用。
标签: javascript reactjs