当前位置:首页 > 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
分享给朋友:

相关文章

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

jquery 图片

jquery 图片

jQuery 图片操作 jQuery 提供了多种方法来操作图片,包括加载、显示、隐藏、调整尺寸等。以下是一些常见的图片操作方法: 动态加载图片 使用 attr() 方法可以动态修改图片的 src 属…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…