当前位置: 首页 > 知识库问答 >
问题:

HTML画布Img缩放不知何故不起作用

颜均
2023-03-14

我试图通过Javascript缩放本地图像,如下所示:

function resizeImage(file, func){
    var canvas = document.createElement('canvas');
    var img = new Image();
    img.onload = function () {
        var factor = img.width/800;
        canvas.width = 800;
        canvas.height = img.height/factor;
        ctx = canvas.getContext('2d');
        ctx.scale(factor, factor);
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
        func(canvas.toDataURL());
    }
    img.src = file.dataload; //file is an json-Object and dataload a dataURI
}

不知怎的,画布返回的数据。toDataURL()没有以任何方式调整大小。我仔细检查了画布。宽度和画布。高度是正确的计算尺寸。

知道哪里出了问题吗?

共有1个答案

丁淇
2023-03-14

尝试删除scale()方法,因为它只会影响绘制到画布位图的内容,而不会影响位图本身(无论如何,drawImage()都会正确缩放图像)。

您需要使用宽度高度属性缩放画布。这些是使用toDataURL()获得维度的基础。

var factor = img.width/800;
var scale = 2;
canvas.width = 800 * scale; 
canvas.height = img.height/factor * scale;

如果您需要canvas元素在屏幕上保持不变,也可以对其应用CSS:

canvas.style.width = 800 + 'px'; 
canvas.style.height = img.height/factor + 'px';
 类似资料:
  • 在客户端独立的JS应用程序中,我正在尝试使其可以在画布上调用toDataURL(),我已经在画布上绘制了一些由URL指定的图像。即我可以在文本框中输入我想在画布上绘制的任何图像(托管在imgur上)的url,单击“绘制”按钮,它将在画布上绘制。最终用户应该能够将他们的最终渲染保存为单个图像,为此我使用了toDataURL()。 无论如何,直到他们真的修复了那个恼人的“操作不安全”错误(天啊,你要告

  • 问题内容: 如何才能平滑地为画布创建缩放动画?GWT提供了一种获取滚轮数量的方法和。 这里的问题是,每个车轮运动都会执行此方法,并且如果我在该方法本身中调用画布重绘,事情会变得很滞后。 因此,我想到了以某种方式制作缩放动画的方法。但是如何? 我考虑过创建一个,但没有真正的主意,因为只有mousewheelevent作为起点,而用户没有完成用滚轮缩放的终点… 问题答案: 这是我用来缩放图像的可伸缩图

  • 我的出发点如下: FXML: Java FX控制器:

  • 我正在做自己的画布抽屉项目,只是停留在放大/缩小功能上。在我的项目中,我使用缩放和平移来进行缩放,因为我想将所有画布及其元素保持在中心。在画了一点草图(不是数学天才)之后,我成功地画出了下面的公式用于翻译过程,因此缩放后画布将保持在它的视口的中间:旧的宽度和高度/ 2 -新的宽度和高度(这是旧的宽度和高度乘以比例步长,在我的例子中是1.1)/2。从逻辑上讲,这应该行得通。但是在尝试了几次放大和缩小

  • 我正在尝试添加一个css过渡,因此当用户悬停在div上时,后台将像这样放大https://codepen.io/mrsalami/pen/eplzme。但是,转换延迟不起作用。 我得HTML: 我的CSS: 我的问题的代码是https://codepen.io/mrsalami/pen/wkjrjr

  • 除了平移和旋转,HTML5的画布API还提供了缩放画布上下文的手段。本节,我们将使用scale()方法来按比例缩小画布上下文的高度。 图4-5 缩放画布上下文 绘制步骤 按照以下步骤,绘制一个按比例缩小的矩形: 1. 定义画布上下文,及矩形的尺寸: window.onload = function(){ var canvas  = document.getElementById("myCan