当前位置:首页 > JavaScript

js 实现图片功能实现

2026-04-04 00:55:06JavaScript

图片加载与显示

使用 Image 对象加载图片,通过监听 onload 事件确保图片加载完成后显示:

const img = new Image();
img.src = 'image.jpg';
img.onload = function() {
  document.body.appendChild(img);
};
img.onerror = function() {
  console.error('图片加载失败');
};

Canvas 绘制图片

通过 Canvas API 绘制图片,支持缩放和裁剪:

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();
img.src = 'image.jpg';
img.onload = function() {
  canvas.width = img.width;
  canvas.height = img.height;
  ctx.drawImage(img, 0, 0);
  document.body.appendChild(canvas);
};

图片压缩与上传

使用 Canvas 压缩图片并转换为 Blob 上传:

function compressImage(file, quality = 0.8) {
  return new Promise((resolve) => {
    const reader = new FileReader();
    reader.onload = function(e) {
      const img = new Image();
      img.src = e.target.result;
      img.onload = function() {
        const canvas = document.createElement('canvas');
        const ctx = canvas.getContext('2d');
        canvas.width = img.width;
        canvas.height = img.height;
        ctx.drawImage(img, 0, 0);
        canvas.toBlob((blob) => resolve(blob), 'image/jpeg', quality);
      };
    };
    reader.readAsDataURL(file);
  });
}
// 调用示例
compressImage(inputFile).then(blob => {
  const formData = new FormData();
  formData.append('image', blob);
  fetch('/upload', { method: 'POST', body: formData });
});

图片滤镜效果

通过 Canvas 的 getImageDataputImageData 实现滤镜(如灰度化):

function applyGrayscale(canvas) {
  const ctx = canvas.getContext('2d');
  const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  const data = imageData.data;
  for (let i = 0; i < data.length; i += 4) {
    const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;
    data[i] = avg;     // R
    data[i + 1] = avg; // G
    data[i + 2] = avg; // B
  }
  ctx.putImageData(imageData, 0, 0);
}

图片懒加载

通过 Intersection Observer API 实现图片懒加载:

const lazyImages = document.querySelectorAll('img[data-src]');
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      observer.unobserve(img);
    }
  });
});
lazyImages.forEach(img => observer.observe(img));

图片裁剪与缩放

使用第三方库(如 Cropper.js)实现交互式裁剪:

js 实现图片功能实现

import Cropper from 'cropperjs';
const image = document.getElementById('image');
const cropper = new Cropper(image, {
  aspectRatio: 16 / 9,
  crop(event) {
    console.log(event.detail.x, event.detail.y);
  }
});
// 获取裁剪结果
const croppedCanvas = cropper.getCroppedCanvas();

以上方法覆盖了图片处理的核心场景,可根据需求选择或组合使用。

标签: 功能图片
分享给朋友:

相关文章

vue实现图片循环

vue实现图片循环

实现图片循环展示 在Vue中实现图片循环展示可以通过v-for指令结合数组数据完成。以下是具体实现方式: 基础循环展示 准备图片数据数组,使用v-for渲染图片列表: <template&g…

vue实现付费功能

vue实现付费功能

Vue 实现付费功能的方法 集成第三方支付平台 选择适合的第三方支付平台(如支付宝、微信支付、Stripe、PayPal等),并按照其文档进行集成。在 Vue 项目中,可以通过引入支付平台的 SDK…

vue实现图片编辑

vue实现图片编辑

Vue实现图片编辑的方法 使用第三方库vue-cropper 安装vue-cropper库: npm install vue-cropperjs 在Vue组件中使用: <template&g…

vue实现插件功能

vue实现插件功能

Vue 插件实现方法 安装与注册插件 在 Vue 项目中,插件通常以独立模块形式存在。通过 Vue.use() 方法注册插件,该方法会自动调用插件的 install 函数。 // 引入插件 imp…

vue实现截图功能

vue实现截图功能

Vue实现截图功能的方法 使用html2canvas库 html2canvas是一个流行的JavaScript库,可以将HTML元素转换为Canvas,进而生成图片。在Vue项目中安装html2can…

实现图片旋转js

实现图片旋转js

使用CSS transform属性旋转图片 通过CSS的transform属性可以轻松实现图片旋转。以下是一个简单的示例代码: const image = document.getElement…