当前位置:首页 > JavaScript

js裁剪图片js实现

2026-04-05 04:54:00JavaScript

使用Canvas裁剪图片

Canvas API提供了drawImage方法,可以实现图片裁剪功能。该方法可以指定源图像的裁剪区域和目标画布的绘制位置及大小。

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

使用第三方库cropper.js

cropper.js是一个专业的图片裁剪库,提供了丰富的配置选项和交互功能。它支持拖拽、缩放、旋转等操作。

// 初始化cropper
const image = document.getElementById('image');
const cropper = new Cropper(image, {
  aspectRatio: 16 / 9,
  crop: function(event) {
    console.log(event.detail.x, event.detail.y);
  }
});

// 获取裁剪结果
const croppedCanvas = cropper.getCroppedCanvas();
const croppedImageUrl = croppedCanvas.toDataURL('image/jpeg');

响应式图片裁剪

对于需要适应不同屏幕尺寸的场景,可以使用CSS和JavaScript结合实现响应式裁剪。

function responsiveCrop(image, container) {
  const containerWidth = container.offsetWidth;
  const containerHeight = container.offsetHeight;
  const imageAspect = image.naturalWidth / image.naturalHeight;
  const containerAspect = containerWidth / containerHeight;

  let cropWidth, cropHeight;
  if (imageAspect > containerAspect) {
    cropHeight = image.naturalHeight;
    cropWidth = cropHeight * containerAspect;
  } else {
    cropWidth = image.naturalWidth;
    cropHeight = cropWidth / containerAspect;
  }

  const x = (image.naturalWidth - cropWidth) / 2;
  const y = (image.naturalHeight - cropHeight) / 2;

  return cropImage(image, x, y, cropWidth, cropHeight);
}

上传前预览裁剪效果

在文件上传前实现客户端预览裁剪效果,可以提升用户体验。

const fileInput = document.getElementById('file-input');
fileInput.addEventListener('change', function(e) {
  const file = e.target.files[0];
  const reader = new FileReader();

  reader.onload = function(event) {
    const img = new Image();
    img.onload = function() {
      const cropped = cropImage(img, 0, 0, 300, 300);
      document.getElementById('preview').src = cropped;
    };
    img.src = event.target.result;
  };

  reader.readAsDataURL(file);
});

保存裁剪后的图片

将裁剪后的图片保存为文件或上传到服务器。

function saveCroppedImage(canvas, filename) {
  canvas.toBlob(function(blob) {
    const link = document.createElement('a');
    link.download = filename;
    link.href = URL.createObjectURL(blob);
    link.click();
  }, 'image/jpeg', 0.95);
}

性能优化建议

对于大尺寸图片,考虑先压缩再裁剪以提高性能。可以使用createImageBitmapAPI处理大图,它支持在Worker线程中处理图像。

js裁剪图片js实现

async function processLargeImage(file) {
  const bitmap = await createImageBitmap(file);
  const canvas = new OffscreenCanvas(300, 300);
  const ctx = canvas.getContext('2d');
  ctx.drawImage(bitmap, 0, 0, 300, 300);
  return canvas.convertToBlob();
}

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

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

h5实现图片压缩

h5实现图片压缩

使用Canvas API压缩图片 HTML5的Canvas API可以通过调整画布尺寸和图像质量来实现图片压缩。创建一个Canvas元素,将图片绘制到Canvas上,再通过toDataURL或toBl…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…