使用JavaScript转换图片格式

我们可以在现代浏览器中直接转换图片和格式,不需要上传服务器或者使用服务器脚本。

HTML

<!-- 文件上传控件 -->
<input type="file" id="fileInput" accept="image/*" />

<!-- 输出格式选择 -->
<select id="formatSelect">
  <option value="image/jpeg">JPEG</option>
  <option value="image/png">PNG</option>
  <option value="image/webp">WEBP</option>
  <!-- 可以添加更多图片格式 -->
</select>

<!-- 转换图片按钮 -->
<button id="convertButton">转换图片</button>

<!-- 导出图片按钮 -->
<a id="downloadButton" style="display: none">下载转换后的图片</a>

<!-- 这里将展示转换后的图片 -->
<div id="result"></div>

一个 file 类型的 input 用于上传本地图片,一个下拉框用于选择导出图片类型(JPEG、PNG、WEBP),一个按钮点击进行转换,一个 a 标签导出转换后的图片,最后一个 div 显示转换后的图片。

SCRIPT

document.addEventListener("DOMContentLoaded", function () {
  const fileInput = document.getElementById("fileInput");
  const formatSelect = document.getElementById("formatSelect");
  const downloadButton = document.getElementById("downloadButton");

  fileInput.addEventListener("change", handleFileSelect, false);

  document.getElementById("convertButton").addEventListener(
    "click",
    function () {
      const files = fileInput.files;
      if (files.length === 0) {
        alert("Please select a file.");
        return;
      }
      const file = files[0];

      const reader = new FileReader();
      reader.onload = function (event) {
        const img = new Image();
        img.onload = function () {
          const dataUrl = convertImageFormat(
            img,
            formatSelect.value,
            0.92
          ); // 92% quality for JPEG/WebP
          displayImage(dataUrl);
          // 显示下载按钮
          downloadButton.style.display = "block";
          // 将转换后的图片的URL设置为下载链接
          downloadButton.href = dataUrl;
          console.log(dataUrl);
          // 设置下载的文件名
          downloadButton.download =
            "converted_image." + formatSelect.value.split("/")[1];
        };
        img.src = event.target.result;
      };
      reader.readAsDataURL(file);
    },
    false
  );

  function displayImage(dataUrl) {
    const resultDiv = document.getElementById("result");
    resultDiv.innerHTML = "";
    const img = document.createElement("img");
    img.src = dataUrl;
    resultDiv.appendChild(img);
  }

  // 图片格式转换函数
  function convertImageFormat(image, outputFormat, quality) {
    const canvas = document.createElement("canvas");
    canvas.width = image.width;
    canvas.height = image.height;
    const ctx = canvas.getContext("2d");
    ctx.drawImage(image, 0, 0, image.width, image.height);
    return canvas.toDataURL(outputFormat, quality);
  }

  // 文件选择处理
  function handleFileSelect(event) {
    const file = event.target.files[0];
    if (!file.type.match("image.*")) {
      alert("Please select an image file.");
      return;
    }
    // 隐藏下载按钮直到图片被转换
    downloadButton.style.display = "none";
  }
});

当文档加载完毕后 (DOMContentLoaded 事件被触发时),代码中定义的函数开始执行。

用户通过一个输入控件选择一个图像文件,并可以选择一个目标格式。

点击一个按钮后,选中的文件读取并转换为所选的图像格式。

图片转换是通过创建一个临时的 canvas 元素,将上传的图片绘制在该元素上,并以指定的格式和质量转换为 DataURL 实现的。

转换后的图片会显示在页面上,并提供一个链接供用户下载。

下载按钮最初是隐藏的,转换完成后会显示出来,并且会将 DataURL 设置为下载链接的href属性,并为转换后的文件指定一个默认的下载名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值