当前位置:首页 > JavaScript

js实现图片

2026-04-03 21:16:46JavaScript

图片加载与显示

在JavaScript中加载并显示图片可以通过Image对象或<img>标签实现。以下是两种常见方法:

使用Image对象动态加载

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

通过DOM操作创建<img>标签

const imgElement = document.createElement('img');
imgElement.setAttribute('src', 'path/to/image.png');
imgElement.setAttribute('alt', '描述文本');
document.querySelector('.container').appendChild(imgElement);

图片懒加载实现

懒加载能提升页面性能,通过IntersectionObserver API实现:

js实现图片

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));

HTML需配合使用:

<img data-src="actual-image.jpg" src="placeholder.jpg" alt="描述">

图片压缩与预览

通过Canvas实现客户端图片压缩:

function compressImage(file, maxWidth, maxHeight, quality) {
  return new Promise((resolve) => {
    const reader = new FileReader();
    reader.onload = function(e) {
      const img = new Image();
      img.onload = function() {
        const canvas = document.createElement('canvas');
        let width = img.width;
        let height = img.height;

        if (width > maxWidth) {
          height *= maxWidth / width;
          width = maxWidth;
        }
        if (height > maxHeight) {
          width *= maxHeight / height;
          height = maxHeight;
        }

        canvas.width = width;
        canvas.height = height;
        const ctx = canvas.getContext('2d');
        ctx.drawImage(img, 0, 0, width, height);
        resolve(canvas.toDataURL('image/jpeg', quality));
      };
      img.src = e.target.result;
    };
    reader.readAsDataURL(file);
  });
}

图片滤镜效果

使用CSS滤镜或Canvas实现特效:

js实现图片

CSS滤镜示例

document.getElementById('filter-btn').addEventListener('click', () => {
  const img = document.getElementById('target-image');
  img.style.filter = 'grayscale(50%) brightness(120%)';
});

Canvas像素级处理

function applySepia(imgElement) {
  const canvas = document.createElement('canvas');
  canvas.width = imgElement.width;
  canvas.height = imgElement.height;
  const ctx = canvas.getContext('2d');
  ctx.drawImage(imgElement, 0, 0);

  const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  const data = imageData.data;

  for (let i = 0; i < data.length; i += 4) {
    const r = data[i];
    const g = data[i + 1];
    const b = data[i + 2];
    data[i] = Math.min(255, (r * 0.393) + (g * 0.769) + (b * 0.189));
    data[i + 1] = Math.min(255, (r * 0.349) + (g * 0.686) + (b * 0.168));
    data[i + 2] = Math.min(255, (r * 0.272) + (g * 0.534) + (b * 0.131));
  }

  ctx.putImageData(imageData, 0, 0);
  return canvas.toDataURL();
}

图片裁剪与旋转

使用Canvas实现基础图片编辑功能:

function cropImage(sourceImg, x, y, width, height) {
  const canvas = document.createElement('canvas');
  canvas.width = width;
  canvas.height = height;
  const ctx = canvas.getContext('2d');
  ctx.drawImage(sourceImg, x, y, width, height, 0, 0, width, height);
  return canvas;
}

function rotateImage(imgElement, degrees) {
  const canvas = document.createElement('canvas');
  const rad = degrees * Math.PI / 180;
  const sin = Math.abs(Math.sin(rad));
  const cos = Math.abs(Math.cos(rad));
  canvas.width = imgElement.width * cos + imgElement.height * sin;
  canvas.height = imgElement.width * sin + imgElement.height * cos;

  const ctx = canvas.getContext('2d');
  ctx.translate(canvas.width / 2, canvas.height / 2);
  ctx.rotate(rad);
  ctx.drawImage(imgElement, -imgElement.width / 2, -imgElement.height / 2);
  return canvas;
}

标签: 图片js
分享给朋友:

相关文章

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js 实现全屏

js 实现全屏

使用 requestFullscreen 方法 通过调用元素的 requestFullscreen 方法可以实现全屏。该方法兼容现代浏览器,但不同浏览器可能需要前缀。 const element =…

js实现递归

js实现递归

递归的基本概念 递归是一种通过函数调用自身来解决问题的方法。在JavaScript中,递归通常用于处理具有重复子问题或分治结构的数据,例如树形结构、阶乘计算等。 递归的实现要点 基线条件(Base…

js实现保存图片

js实现保存图片

使用Canvas绘制并保存图片 在HTML中创建一个Canvas元素,通过JavaScript绘制内容后转换为图片并保存。Canvas的toDataURL方法可将画布内容转为Base64编码的图片数据…