前端實現圖片壓縮:基于 HTML5 File API 與 Canvas 的完整方案

在 Web 開發中,處理用戶上傳的圖片時,前端壓縮可以有效減少服務器壓力并提升上傳效率。本文將詳細講解如何通過<input type="file">實現圖片上傳,結合 Canvas 實現圖片壓縮,并實時展示壓縮前后的圖片預覽和文件大小對比。

一、核心功能架構

我們將實現以下功能模塊:

  1. 文件選擇組件:使用 HTML 原生文件輸入控件
  2. 圖片預覽區域:展示原始圖片和壓縮后圖片
  3. 大小對比顯示:實時顯示壓縮前后的文件大小(KB/MB)
  4. 壓縮操作按鈕:觸發圖片壓縮邏輯
  5. 進度反饋:通過視覺提示顯示處理狀態

最終效果如下:

二、HTML 基礎結構

首先構建頁面骨架,包含文件輸入、預覽區域和信息展示模塊:

<div class="container"><h1>圖片壓縮工具</h1><!-- 文件上傳組件 --><input type="file" accept="image/*" id="imageInput" /><!-- 操作按鈕 --><button id="compressBtn" disabled>開始壓縮</button><!-- 預覽區域 --><div class="preview-container"><div class="preview-item"><h3>原始圖片</h3><div id="originalPreview"></div><span id="originalSize"></span></div><div class="preview-item"><h3>壓縮后圖片</h3><div id="compressedPreview"></div><span id="compressedSize"></span></div></div>
</div>

三、CSS 樣式設計

使用 Flex 布局實現響應式預覽,添加視覺反饋樣式:

.container {max-width: 1200px;margin: 0 auto;padding: 20px;
}.preview-container {display: flex;gap: 40px;margin-top: 30px;
}.preview-item {flex: 1;border: 1px solid #eee;padding: 20px;border-radius: 8px;
}img {max-width: 100%;max-height: 400px;object-fit: contain;display: block;margin: 20px 0;
}button {padding: 10px 20px;background-color: #4a90e2;color: white;border: none;border-radius: 4px;cursor: pointer;margin: 20px 0;
}button:disabled {background-color: #ccc;cursor: not-allowed;
}.size-info {color: #666;font-size: 0.9em;
}

四、核心 JavaScript 邏輯

1. 初始化事件綁定

const imageInput = document.getElementById('imageInput');
const compressBtn = document.getElementById('compressBtn');
const originalPreview = document.getElementById('originalPreview');
const compressedPreview = document.getElementById('compressedPreview');
const originalSize = document.getElementById('originalSize');
const compressedSize = document.getElementById('compressedSize');imageInput.addEventListener('change', handleImageChange);
compressBtn.addEventListener('click', handleCompression);

2. 圖片選擇處理函數

let selectedImage = null;function handleImageChange(e) {const file = e.target.files[0];if (file && isImageFile(file)) {selectedImage = {file: file,type:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83110.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83110.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83110.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通信算法之280:無人機偵測模塊知識框架思維導圖

1. 無人機偵測模塊知識框架思維導圖, 見文末章節。 2. OFDM參數估計,基于循環自相關特性。 3. 無人機其它參數估計

單片機寄存器的四種主要類型!

1. 控制寄存器&#xff08;Control Registers&#xff09;?? ??專業定義??&#xff1a;用于配置硬件行為或觸發操作的寄存器。 ??大白話??&#xff1a; 相當于設備的??“控制面板”??&#xff0c;通過寫入特定值來??開關功能??或??調整參數??。例如&am…

第100+41步 ChatGPT學習:R語言實現誤判病例分析

本期是《第33步 機器學習分類實戰&#xff1a;誤判病例分析》的R版本。 嘗試使用Deepseek-R1來試試寫代碼&#xff0c;效果還不錯。 下面上R語言代碼&#xff0c;以Xgboost為例&#xff1a; # 加載必要的庫 library(caret) library(pROC) library(ggplot2) library(xgboost)…

HTML Day04

Day04 0.引言1. HTML字符實體2. HTML表單2.1 表單標簽2.2 表單示例 3. HTML框架4. HTML顏色4.1 16進制表示法4.2 rgba表示法4.3 名稱表達法 5. HTML腳本 0.引言 剛剛回顧了前面幾篇博客&#xff0c;感覺寫的內容倒是很詳細&#xff0c;每個知識點都做了說明。但是感覺在知識組織…

comfyui 工作流中 視頻長度和哪些參數有關? 生成15秒的視頻,再加上RTX4060 8G顯卡,嘗試一下

想再消費級顯卡上生成15秒長視頻&#xff0c;還是比較慢的&#xff0c;不過動漫的畫質要求比較低 在ComfyUI中生成15秒視頻需綜合考慮視頻參數配置、模型選擇和硬件優化&#xff0c;尤其針對RTX 4060 8G顯存的限制。 ?? 一、影響視頻長度的核心參數 總幀數&#xff08;video_…

Netty 實戰篇:構建高性能聊天服務器

在前兩篇文章中&#xff0c;我們深入探討了 Netty 的 IO 模型以及其核心組件的工作原理。本篇文章將通過一個實際的聊天服務器示例&#xff0c;展示如何使用 Netty 構建高性能的網絡應用。 一、項目結構 項目主要包含以下幾個部分&#xff1a; ChatServer&#xff1a;服務器啟…

智紳科技——科技賦能健康養老,構建智慧晚年新生態

當老齡化浪潮與數字技術深度碰撞&#xff0c;智紳科技以 “科技賦能健康&#xff0c;智慧守護晚年” 為核心理念&#xff0c;錨定數字健康與養老服務賽道&#xff0c;通過人工智能、物聯網、大數據等技術集成&#xff0c;為亞健康群體與中老年人群構建 “監測 - 預防 - 輔助 - …

Tkinter軟件——顯示txt標簽的目標水平邊框圖像

代碼&#xff1a; import tkinter as tk from tkinter import filedialog from tkinter import messagebox import cv2 from PIL import Image, ImageTk import osclass ImageBoxApp:def __init__(self, master):self.master masterself.master.title("Image Box Drawer…

Linux 文件覆蓋機制與實踐:以 mv 命令為切入點

引言&#xff1a;文件覆蓋的本質 文件覆蓋是 Linux 文件系統中常見的操作&#xff0c;指的是在目標路徑已存在文件的情況下&#xff0c;將源文件的內容寫入目標文件&#xff0c;導致目標文件的原有內容被替換。在 Linux 中&#xff0c;文件覆蓋通常通過命令行工具&#xff08;…

學習路之PHP--easyswoole操作數據庫

學習路之PHP--easyswoole操作數據庫 0、安裝orm插件一、創建數據庫二、創建模型三、控制器顯示四、效果五、問題 0、安裝orm插件 composer require easyswoole/orm一、創建數據庫 表&#xff1a; CREATE TABLE cases (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主鍵,titl…

手寫multi-head Self-Attention,各個算子詳細注釋版

文章目錄 MultiHeadAttentionFormal的實現操作詳解1. &#x1f50d; attention_mask2. &#x1f50d; matmul? 其他實現方式1. 使用 運算符&#xff08;推薦簡潔寫法&#xff09;2. 使用 torch.einsum()&#xff08;愛因斯坦求和約定&#xff09;3. 使用 torch.bmm()&#xf…

尚硅谷redis7 41-46 redis持久化之AOF異常恢復演示

AOF每一秒鐘寫入一次。當內容才寫了一小半,沒有寫完整時&#xff0c;突然,redis掛了,導致aof文件錯誤。 故意亂寫正常的AOF文件,模擬網絡閃斷文件寫error 重啟 Redis 之后就會進行AOF文件的載入,發現啟動都失敗 首先cd /usr/local/bin 異常修復命令:redis-check-aof -- fix 進…

004時裝購物系統技術解析:構建智能時尚消費平臺

時裝購物系統技術解析&#xff1a;構建智能時尚消費平臺 在電商行業蓬勃發展的當下&#xff0c;時裝購物系統憑借其便捷性與多樣性&#xff0c;成為消費者選購時尚單品的重要渠道。該系統通過商品信息、訂單管理等核心模塊&#xff0c;結合前臺展示與后臺錄入功能&#xff0c;…

數據湖 (特點+與數據倉庫和數據沼澤的對比講解)

數據湖就像一個“數據水庫”&#xff0c;把企業所有原始數據&#xff08;結構化的表格、半結構化的日志、非結構化的圖片/視頻&#xff09;原樣存儲&#xff0c;供后續按需分析。 對比傳統數據倉庫&#xff1a; 數據倉庫數據湖數據清洗后的結構化數據&#xff08;如Excel表格&…

深度剖析Node.js的原理及事件方式

早些年就接觸過Node.js&#xff0c;當時對于這個連接前后端框架就感到很特別。尤其是以獨特的異步阻塞特性&#xff0c;重塑了了服務器端編程的范式。后來陸陸續續做了不少項目&#xff0c;通過實踐對它或多或少增強了不少理解。今天&#xff0c;我試著將從將從原理層剖析其運行…

【AI預測】5月30日尼克斯大戰前瞻:東部黑馬能否再下一城?

&#x1f3c0; 隨著賽季進入白熱化階段&#xff0c;5月30日尼克斯的這場比賽注定焦點十足。作為東部近年來少有的“黑馬型”球隊&#xff0c;尼克斯用硬朗的防守和團隊配合讓人重新認識了這支老牌勁旅。 這篇文章&#xff0c;我們將從數據模型球員表現戰術執行力三個維度&…

人工智能賦能基礎教育個性化學習的理論建構與實踐探索

一、引言 1.1 研究背景與意義 隨著科技的飛速發展&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;已逐漸成為推動社會進步的重要力量。在教育領域&#xff0c;人工智能的應用正逐步改變傳統的教學模式&#xff0c;為個性化學習提供了新…

歷年四川大學計算機保研上機真題

2025四川大學計算機保研上機真題 2024四川大學計算機保研上機真題 2023四川大學計算機保研上機真題 在線測評鏈接&#xff1a;https://pgcode.cn/school 分數求和 題目描述 有一分數序列&#xff1a; 2 / 1 2/1 2/1, 3 / 2 3/2 3/2, 5 / 3 5/3 5/3, 8 / 5 8/5 8/5, 13 /…

正點原子Z15I ZYNQ 開發板發布!板載PCIe2.0、SPFx2、MIPI CSI等接口,資料豐富!

正點原子Z15I ZYNQ 開發板發布&#xff01;板載PCIe2.0、SPFx2、MIPI CSI等接口&#xff0c;資料豐富&#xff01; 正點原子Z15I ZYNQ開發板&#xff0c;核心板全工業級設計&#xff0c;主控芯片的型號是XC7Z015CLG485-2I。開發板由核心板&#xff0b;底板組成&#xff0c;外設…

Ubuntu 22.04 上使用 Docker 安裝 RagFlow

GitHub地址:添加鏈接描述 RAGFlow 是一款開源的檢索增強生成(Retrieval-Augmented Generation,簡稱 RAG)引擎,旨在通過深度文檔理解技術,結合大語言模型(LLM),為用戶提供高質量、可溯源的問答服務。 ?? 快速入門 RAGFlow 提供了便捷的部署方式,支持 Docker 環境。…