前端如何用canvas實現(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;
// 設置原始圖片canvas尺寸
originalCanvas.width = originalWidth;
originalCanvas.height = originalHeight;
// 繪制原始圖片
ctxOriginal.drawImage(img, 0, 0, originalWidth, originalHeight);
// 計算縮放比例
if (Math.max(originalWidth, originalHeight) > 1080) {
scale = 1080 / Math.max(originalWidth, originalHeight);
} else {
scale = 1;
}
// 計算縮放后的尺寸
width = originalWidth * scale;
height = originalHeight * scale;
// 設置縮放后的圖片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ù)目標容器的尺寸和圖片的原始尺寸計算縮放比例。
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ù)縮放比例計算新的寬度和高度。
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é)
到此這篇關于前端如何用canvas實現(xiàn)圖片的等比例縮放的文章就介紹到這了,更多相關前端canvas圖片等比例縮放內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Bootstrap實現(xiàn)的經(jīng)典柵格布局效果實例【附demo源碼】
這篇文章主要介紹了Bootstrap實現(xiàn)的經(jīng)典柵格布局效果,結(jié)合具體實例形式分析了基于BootStrap實現(xiàn)柵格布局的完整步驟與相關操作技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-03-03
JS函數(shù)動態(tài)傳遞參數(shù)的方法分析【基于arguments對象】
這篇文章主要介紹了JS函數(shù)動態(tài)傳遞參數(shù)的方法,結(jié)合實例形式分析了javascript通過arguments對象獲取傳遞參數(shù)的相關操作技巧,需要的朋友可以參考下2019-06-06
JavaScript暫時性死區(qū)以及函數(shù)作用域
這篇文章主要為大家介紹了JavaScript暫時性死區(qū)以及函數(shù)作用域示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
淺談webpack打包生成的bundle.js文件過大的問題
下面小編就為大家分享一篇淺談webpack打包生成的bundle.js文件過大的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02
javascript實現(xiàn)uploadify上傳格式以及個數(shù)限制
這篇文章主要介紹了javascript如何限制uploadify上傳格式以及個數(shù)的實現(xiàn)方法,感興趣的小伙伴們可以參考一下2015-11-11
JS傳遞對象數(shù)組為參數(shù)給后端,后端獲取的實例代碼
下面小編就為大家?guī)硪黄狫S傳遞對象數(shù)組為參數(shù)給后端,后端獲取的實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06

