前端如何用canvas實(shí)現(xiàn)圖片的等比例縮放
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Canvas Image Resize</title>
</head>
<body>
<input type="file" id="imageInput" accept="image/*">
<div>
<canvas id="canvasOriginal" style="border:1px solid #000;"></canvas>
<canvas id="canvasResized" style="border:1px solid #000;"></canvas>
</div>
<script src="script.js"></script>
</body>
</html>JavaScript代碼
document.getElementById('imageInput').addEventListener('change', function (event) {
const file = event.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function (e) {
const img = new Image();
img.onload = function () {
const originalCanvas = document.getElementById('canvasOriginal');
const resizedCanvas = document.getElementById('canvasResized');
const ctxOriginal = originalCanvas.getContext('2d');
const ctxResized = resizedCanvas.getContext('2d');
const originalWidth = img.width;
const originalHeight = img.height;
let width, height, scale;
// 設(shè)置原始圖片canvas尺寸
originalCanvas.width = originalWidth;
originalCanvas.height = originalHeight;
// 繪制原始圖片
ctxOriginal.drawImage(img, 0, 0, originalWidth, originalHeight);
// 計(jì)算縮放比例
if (Math.max(originalWidth, originalHeight) > 1080) {
scale = 1080 / Math.max(originalWidth, originalHeight);
} else {
scale = 1;
}
// 計(jì)算縮放后的尺寸
width = originalWidth * scale;
height = originalHeight * scale;
// 設(shè)置縮放后的圖片canvas尺寸
resizedCanvas.width = width;
resizedCanvas.height = height;
// 繪制縮放后的圖片
ctxResized.drawImage(img, 0, 0, width, height);
};
img.src = e.target.result;
};
reader.readAsDataURL(file);
}
});代碼解釋
1.加載圖片: 使用 FileReader 讀取用戶選擇的圖片文件。
const reader = new FileReader();
reader.onload = function (e) {
const img = new Image();
img.onload = function () {
// 處理代碼邏輯
};
img.src = e.target.result;
};
reader.readAsDataURL(file);2.獲取圖片原始尺寸: 獲取圖片的原始寬度和高度。
const originalWidth = img.width; const originalHeight = img.height;
3.計(jì)算縮放比例: 根據(jù)目標(biāo)容器的尺寸和圖片的原始尺寸計(jì)算縮放比例。
let width, height, scale;
if (Math.max(originalWidth, originalHeight) > 1080) {
scale = 1080 / Math.max(originalWidth, originalHeight);
} else {
scale = 1;
}
width = originalWidth * scale;
height = originalHeight * scale;4.計(jì)算新的尺寸: 根據(jù)縮放比例計(jì)算新的寬度和高度。
const resizedWidth = originalWidth * scale; const resizedHeight = originalHeight * scale;
5. 繪制圖片: 使用drawImage方法繪制圖片到canvas上。
// 使用canvas繪制原始圖片。 originalCanvas.width = originalWidth; originalCanvas.height = originalHeight; ctxOriginal.drawImage(img, 0, 0, originalWidth, originalHeight); // 使用canvas繪制縮放后的圖片。 resizedCanvas.width = width; resizedCanvas.height = height; ctxResized.drawImage(img, 0, 0, width, height);
總結(jié)
到此這篇關(guān)于前端如何用canvas實(shí)現(xiàn)圖片的等比例縮放的文章就介紹到這了,更多相關(guān)前端canvas圖片等比例縮放內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Bootstrap實(shí)現(xiàn)的經(jīng)典柵格布局效果實(shí)例【附demo源碼】
這篇文章主要介紹了Bootstrap實(shí)現(xiàn)的經(jīng)典柵格布局效果,結(jié)合具體實(shí)例形式分析了基于BootStrap實(shí)現(xiàn)柵格布局的完整步驟與相關(guān)操作技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-03-03
JS 頁(yè)面自動(dòng)加載函數(shù)(兼容多瀏覽器)
兼容多個(gè)瀏覽器的自動(dòng)加載函數(shù)。2009-05-05
javascript異常處理實(shí)現(xiàn)原理詳解
這篇文章主要介紹了javascript異常處理實(shí)現(xiàn)原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
JS函數(shù)動(dòng)態(tài)傳遞參數(shù)的方法分析【基于arguments對(duì)象】
這篇文章主要介紹了JS函數(shù)動(dòng)態(tài)傳遞參數(shù)的方法,結(jié)合實(shí)例形式分析了javascript通過(guò)arguments對(duì)象獲取傳遞參數(shù)的相關(guān)操作技巧,需要的朋友可以參考下2019-06-06
JavaScript暫時(shí)性死區(qū)以及函數(shù)作用域
這篇文章主要為大家介紹了JavaScript暫時(shí)性死區(qū)以及函數(shù)作用域示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
淺談webpack打包生成的bundle.js文件過(guò)大的問(wèn)題
下面小編就為大家分享一篇淺談webpack打包生成的bundle.js文件過(guò)大的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
javascript實(shí)現(xiàn)uploadify上傳格式以及個(gè)數(shù)限制
這篇文章主要介紹了javascript如何限制uploadify上傳格式以及個(gè)數(shù)的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下2015-11-11
JS傳遞對(duì)象數(shù)組為參數(shù)給后端,后端獲取的實(shí)例代碼
下面小編就為大家?guī)?lái)一篇JS傳遞對(duì)象數(shù)組為參數(shù)給后端,后端獲取的實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
javascript根據(jù)像素點(diǎn)取位置示例
這篇文章主要介紹了javascript根據(jù)像素點(diǎn)取位置的示例,大家參考使用吧2014-01-01

