热搜:前端 nest neovim nvim

怎么应用Canvas将一个图片URL转换成PNG格式图像信息

lxf2023-06-02 01:17:27

在我们需要把一个图片URL转换成PNG格式图像信息时,可以用Canvas去完成今天的任务。在这里篇blog中,我们也会学习怎么应用Canvas将一个图片URL转换成PNG格式图像信息,并把它储存为文档。

步骤一:上传图片

最先,我们应该从特定的URL载入图象

const img = new Image();
img.crossOrigin = "anonymous"; // 必要时跨域请求照片,必须设置图片的crossOrigin特性
img.src = url;
await new Promise(resolve => { img.onload = resolve; }); // 等待图片加载完成

在这样一个实例编码中,大家建立一个新的Image目标, 再将图形的URL取值给Image对象src特性,并用Promise等待图片加载完成。

流程二:制作照片到Canvas

一旦图片加载进行,我们就能把它制作到Canvas上

const canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
const ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);

在这样一个实例编码中,大家建立了一个新的Canvas原素,并把它尺寸设为与照片同样。随后,大家获得Canvas的2D前后文,并用drawImage()方式将照片制作到Canvas上。

流程三:将Canvas转换为PNG格式图像信息

一旦我们将要照片制作到Canvas上,我们就能将Canvas转换为PNG格式图像信息。我们可以用Canvas的toDataURL()方式来进行今天的任务。

const pngDataUrl = canvas.toDataURL("image/png");

流程四:将PNG格式图像信息储存为文档

最终,我们可以把PNG格式图像信息储存为文档。我们可以用Blob和File API去完成今天的任务

canvas.toBlob(blob => {
  const file = new File([blob], filename, { type: "image/png" });
  // 在这儿解决File目标
});

在这样一个实例编码中,使用Canvas的toBlob()方式形成Blob目标,并把它传达给File对象,以建设一个新的File目标。随后,大家可以在调用函数中解决File目标,比如把它上传至网络服务器。

汇总

应用HTML5的Canvas API,我们能轻而易举地将一个图片URL转换成PNG格式图像信息,并把它储存为文档。

  • 上传图片
  • 将照片制作到Canvas上
  • 将Canvas转换为PNG格式图像信息
  • 将PNG格式图像信息储存为文档

详细编码

async function urlToFile(url, filename) {
  const img = new Image();
  img.crossOrigin = "anonymous"; // 必要时跨域请求照片,必须设置图片的crossOrigin特性
  img.src = url;
  await new Promise(resolve => { img.onload = resolve; }); // 等待图片加载完成
  const canvas = document.createElement("canvas");
  canvas.width = img.width;
  canvas.height = img.height;
  const ctx = canvas.getContext("2d");
  ctx.drawImage(img, 0, 0);
  return new Promise(resolve => {
    canvas.toBlob(blob => {
      const file = new File([blob], filename, { type: "image/png" });
      resolve(file);
    });
  });
}

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!