当前位置:首页 > JavaScript

js实现裁剪

2026-01-31 13:42:49JavaScript

使用Canvas实现图片裁剪

Canvas API提供了一种简单的方式来裁剪图片。创建一个canvas元素,获取其2D上下文,然后使用drawImage方法指定裁剪区域。

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();

img.onload = function() {
    const cropX = 50, cropY = 50, cropWidth = 200, cropHeight = 200;
    canvas.width = cropWidth;
    canvas.height = cropHeight;

    ctx.drawImage(img, cropX, cropY, cropWidth, cropHeight, 0, 0, cropWidth, cropHeight);
    document.body.appendChild(canvas);
};

img.src = 'image.jpg';

使用第三方库cropper.js

cropper.js是一个流行的图片裁剪库,提供丰富的交互功能。安装后通过简单配置即可实现专业级裁剪效果。

import Cropper from 'cropperjs';

const image = document.getElementById('image');
const cropper = new Cropper(image, {
    aspectRatio: 1,
    viewMode: 1,
    autoCropArea: 0.8,
    responsive: true
});

// 获取裁剪结果
const croppedCanvas = cropper.getCroppedCanvas();

响应式裁剪区域实现

结合鼠标事件实现动态裁剪区域选择。监听mousedown、mousemove和mouseup事件来绘制和调整裁剪框。

let isDragging = false;
let startX, startY, endX, endY;
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

canvas.addEventListener('mousedown', (e) => {
    isDragging = true;
    startX = e.offsetX;
    startY = e.offsetY;
});

canvas.addEventListener('mousemove', (e) => {
    if (!isDragging) return;
    endX = e.offsetX;
    endY = e.offsetY;
    drawSelectionBox();
});

function drawSelectionBox() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.strokeStyle = 'red';
    ctx.strokeRect(startX, startY, endX - startX, endY - startY);
}

保持宽高比的裁剪

通过计算宽高比约束,确保裁剪区域保持特定比例。在mousemove事件中根据比例调整坐标。

const aspectRatio = 16/9;
let width, height;

canvas.addEventListener('mousemove', (e) => {
    if (!isDragging) return;
    const deltaX = e.offsetX - startX;
    const deltaY = e.offsetY - startY;

    if (Math.abs(deltaX) > Math.abs(deltaY * aspectRatio)) {
        width = deltaX;
        height = width / aspectRatio;
    } else {
        height = deltaY;
        width = height * aspectRatio;
    }

    drawSelectionBox(startX, startY, width, height);
});

输出裁剪结果

将canvas裁剪结果转换为Blob或DataURL,便于上传或显示。使用toBlob或toDataURL方法。

canvas.toBlob((blob) => {
    const formData = new FormData();
    formData.append('croppedImage', blob);
    // 上传处理
}, 'image/jpeg', 0.9);

// 或获取DataURL
const imageDataURL = canvas.toDataURL('image/png');
document.getElementById('result').src = imageDataURL;

js实现裁剪

标签: js
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

vue实现js休眠

vue实现js休眠

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

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previ…