news 2026/2/24 16:56:25

原生图片大小编辑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
原生图片大小编辑

创建html文件-复制代码到html文件-浏览器打卡html文件

<!DOCTYPE html>

<html lang="zh-CN">

<head>

<meta charset="UTF-8">

<title>图片实际尺寸修改 & 压缩</title>

<style>

.container {

max-width: 800px;

margin: 20px auto;

padding: 20px;

}

.btn {

margin: 10px 0;

padding: 8px 16px;

background: #0078d7;

color: white;

border: none;

border-radius: 4px;

cursor: pointer;

}

.btn:disabled {

background: #ccc;

cursor: not-allowed;

}

#preview {

margin-top: 20px;

max-width: 100%;

border: 1px solid #eee;

}

.param-set {

margin: 10px 0;

}

label {

display: inline-block;

width: 120px;

}

input {

padding: 4px;

width: 100px;

}

</style>

</head>

<body>

<div class="container">

<!-- 1. 选择本地图片 -->

<input style="width: 100%;" type="file" id="fileInput" accept="image/*">

<!-- 2. 设置目标参数:尺寸/压缩质量 -->

<div class="param-set">

<label>目标宽度(px):</label>

<input type="number" id="targetWidth" value="400" placeholder="如400">

<label>目标高度(px):</label>

<input type="number" id="targetHeight" value="400" placeholder="如400">

<label>压缩质量(0-1):</label>

<input type="number" id="quality" step="0.1" value="0.6" placeholder="如0.6">

<label>导出格式:</label>

<select id="formatSelect">

<option value="jpeg">JPEG (.jpg/.jpeg)</option>

<option value="png">PNG (.png)</option>

</select>

</div>

<!-- 3. 操作按钮 -->

<button class="btn" id="processBtn" disabled>处理图片</button>

<button class="btn" id="downloadBtn" disabled>下载处理后的图片</button>

<!-- 4. 预览处理后的图片 -->

<div>处理后预览:</div>

<img id="preview" alt="预览图">

</div>

<script>

// 获取DOM元素

const fileInput = document.getElementById('fileInput');

const processBtn = document.getElementById('processBtn');

const downloadBtn = document.getElementById('downloadBtn');

const preview = document.getElementById('preview');

preview.style.display = 'none';

const targetWidth = document.getElementById('targetWidth');

const targetHeight = document.getElementById('targetHeight');

const quality = document.getElementById('quality');

const formatSelect = document.getElementById('formatSelect');

let processedBlob = null; // 存储处理后的图片Blob(用于下载)

let currentFormat = 'jpeg'; // 默认格式

formatSelect.addEventListener('change', (e) => {

currentFormat = e.target.value;

console.log('当前格式:', currentFormat);

});

// 1. 选择图片后启用处理按钮

fileInput.addEventListener('change', (e) => {

if (e.target.files.length > 0) {

processBtn.disabled = false;

}

});

// 2. 核心:整体缩小图片(完整画面,等比例)

processBtn.addEventListener('click', async () => {

const file = fileInput.files[0];

if (!file) return;

// 读取原图并转为Image对象

const img = await loadImage(file);

// 创建Canvas

const canvas = document.createElement('canvas');

const ctx = canvas.getContext('2d');

// 计算等比例缩放后的尺寸(核心:只改宽度,高度自动适配,完整保留画面)

const originalWidth = img.width;

const originalHeight = img.height;

const newWidth = Number(targetWidth.value) || 400;

const newHeight = (originalHeight / originalWidth) * newWidth; // 等比例计算高度

// 设置Canvas尺寸为缩放后的尺寸

canvas.width = newWidth;

canvas.height = newHeight;

// 绘制图片:完整缩放,不裁剪(这一步是关键!)

ctx.drawImage(

img,

0, 0, originalWidth, originalHeight, // 原图完整区域

0, 0, newWidth, newHeight // Canvas完整区域(缩放后)

);

// 导出为Blob(压缩体积)

canvas.toBlob((blob) => {

processedBlob = blob;

// 预览缩小后的完整图片

const previewUrl = URL.createObjectURL(blob);

preview.src = previewUrl;

preview.style.display = 'block';

downloadBtn.disabled = false;

// 打印大小对比(验证)

console.log('处理前:', (file.size / 1024).toFixed(2), 'KB');

console.log('处理后:', (blob.size / 1024).toFixed(2), 'KB');

console.log('缩放后尺寸:', newWidth + 'x' + newHeight);

}, currentFormat == 'png' ? 'image/png' : 'image/jpeg', Number(quality.value) || 0.6);

});

// 3. 下载处理后的图片

downloadBtn.addEventListener('click', () => {

if (!processedBlob) return;

const url = URL.createObjectURL(processedBlob);

const a = document.createElement('a');

a.href = url;

a.download = `processed-${Date.now()}.${currentFormat}`; // 下载文件名

a.click();

// 释放URL资源

URL.revokeObjectURL(url);

});

// 辅助函数:读取文件并转为Image对象

function loadImage(file) {

return new Promise((resolve) => {

const reader = new FileReader();

reader.onload = (e) => {

const img = new Image();

img.onload = () => resolve(img);

img.src = e.target.result;

};

reader.readAsDataURL(file);

});

}

</script>

</body>

</html>

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/12 14:02:35

如何提升零样本克隆的音质还原度?技巧分享

如何提升零样本克隆的音质还原度&#xff1f;技巧分享 在数字人、虚拟主播和个性化语音助手日益普及的今天&#xff0c;用户早已不再满足于“能说话”的机器语音。他们期待的是有温度、有辨识度、像真人一样的声音——哪怕只听过几秒钟原声&#xff0c;也能精准复刻出那个熟悉的…

作者头像 李华
网站建设 2026/2/22 6:58:25

又一院士名单,公布

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【顶会/顶刊】投稿交流群 添加微信号&#xff1a;CVer2233&#xff0c;小助手拉你进群&#xff01; 扫描下方二维码&#xff0c;加入CVer学术星球&#xff01;可以获得最新顶…

作者头像 李华
网站建设 2026/2/23 3:03:26

ICML 2026 投稿群来了!还有IJCAI、ICLR 2026 投稿交流群!

点击下方卡片&#xff0c;关注“CVer”公众号AI/CV重磅干货&#xff0c;第一时间送达点击进入—>【顶会/顶刊】投稿交流群添加微信&#xff1a;CVer2233&#xff0c;助手会拉你进群&#xff01;扫描下方二维码&#xff0c;加入CVer学术星球&#xff01;可获得最新顶会/顶刊上…

作者头像 李华
网站建设 2026/2/20 0:09:54

超越兼容:金仓数据库如何以三重革新,破解企业核心业务运维难题

兼容是对企业历史投资的尊重是确保业务平稳过渡的基石然而这仅仅是故事的起点在数字化转型的深水区&#xff0c;企业对数据库的需求早已超越“语法兼容”的基础诉求。无论是核心业务系统的稳定运行&#xff0c;还是敏感数据的安全防护&#xff0c;亦或是复杂场景下的性能优化&a…

作者头像 李华
网站建设 2026/2/13 5:23:08

Win11 查找并开启 IE 浏览器教程

Win11 正式发布后&#xff0c;不少用户第一时间升级了新系统&#xff0c;却发现找不到熟悉的IE浏览器。其实这是因为微软已在 Win11 中正式移除了的独立前端程序&#xff0c;但它的核心内核仍被系统保留。下面就为大家分享 Win11 开启 IE 浏览器的具体操作步骤&#xff1a; 右…

作者头像 李华