P5JS中如何对上传的图片进行缩放

How to scale the uploaded image in P5JS

我正在尝试编写一个可以将图像作为图章上传的图章工具功能。不幸的是,我无法将图像缩放为邮票尺寸。例如。图像保持原始尺寸,但邮票尺寸为 50x50。因此,图章只能显示图像的左上角。

我尝试在 P5js 中使用大小或调整大小功能,但它不起作用。

我初始化了一个名为“stamp”的全局变量和大小。

    stamp = loadImage('./stamps/star.png');
    this.size = 50;

在P5JS绘制函数中

    image(stamp, mouseX, mouseY, this.size, this.size);

在我的 handleFile 函数中

var handleFile = function (file) {
    print(file);
    if (file.type === 'image') {
        var targetStamp = createDiv();
        targetStamp.class('stamps');
        newStamp = createImg(file.data, '', () => { newStamp.size(100, AUTO) });
        targetStamp.child(newStamp);
        stampSelector = select(".stampSelector");
        stampSelector.child(targetStamp);

        targetStamp.mouseClicked(function () {
            var items = selectAll(".stamps");
            for (var i = 0; i < items.length; i++) {
                items[i].style('border', '0')
            }
            targetStamp.style("border", "2px solid blue");
            stamp = newStamp;
        })
    } else {
        img = null;
    }
}

CSS成功更改大小,但不能作为图章使用。任何人都可以提供帮助。

当您说“不能用作邮票”时,不清楚是什么问题。使用简化版本的代码,它通常似乎可以工作。但是,image() 函数处理已调整大小的源 <img> 元素的方式似乎存在错误(它将源裁剪为指定大小,而不是使用原始图像尺寸,即使当您明确指定源维度时)。不过有一个解决方法:使用 CSS 转换来控制 <img> 元素的大小。

let img;
let size = 50;

function setup() {
  createCanvas(400, 400);
  let input = createFileInput(handleFile);
  input.position(10, 10);
  noLoop();
  background(0);
}

function draw() {}

function mouseClicked() {
  if (img) {
    image(img, mouseX, mouseY, size, size);
  }
}

function handleFile(file) {
  if (file.type === "image") {
    img = createImg(file.data, "uploaded image", "anonymous", () => {
      // This resizes the <img> tag, but will not effect the size of the image when drawn.
      // img.size(100, AUTO);
      img.style('transform', `scale(${100 / img.width})`);
      img.style('transform-origin', 'top left');
    });
  } else {
    img = null;
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>