<title>Interactive Image Manipulation on Canvas</title>
font-family: Arial, sans-serif;
<div id="canvasContainer">
<div class="instructions">
<strong>操作说明:</strong><br>
- 缩放: 在图片上按住 Alt 键并上下拖动鼠标<br>
- 旋转: 在图片上按住 Shift 键并左右拖动鼠标<br>
<button id="saveBtn">Save Image</button>
<canvas id="canvas" width="1500" height="1500"></canvas>
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var dragging = false, rotating = false, scaling = false;
var imgX = canvas.width / 2;
var imgY = canvas.height / 2;
var ROTATION_SENSITIVITY = 0.5;
var SCALE_SENSITIVITY = 0.001;
img.onload = function () {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.translate(imgX, imgY);
ctx.rotate(imgRotate * Math.PI / 180);
ctx.scale(imgScale, imgScale);
ctx.drawImage(img, -img.width / 2, -img.height / 2);
function getMousePos(evt) {
var rect = canvas.getBoundingClientRect();
x: evt.clientX - rect.left,
y: evt.clientY - rect.top
canvas.addEventListener('mousedown', function (evt) {
var pos = getMousePos(evt);
rotating = evt.shiftKey;
dragging = !(scaling || rotating);
canvas.addEventListener('mousemove', function (evt) {
if (!dragging && !rotating && !scaling) return;
var pos = getMousePos(evt);
imgRotate += dx * ROTATION_SENSITIVITY;
var scaleFactor = 1 + dy * SCALE_SENSITIVITY;
imgScale *= scaleFactor;
canvas.addEventListener('mouseup', function () {
canvas.addEventListener('mouseleave', function () {
document.getElementById('saveBtn').addEventListener('click', function () {
var dataURL = canvas.toDataURL('image/png');
var link = document.createElement('a');
link.download = '延边图.png';