画像補正アプリ
ここに画像をドラッグ&ドロップしてください
<!DOCTYPE html>
<html>
<head>
<title>画像補正アプリ</title>
<style>
body {
margin: 0;
padding: 0;
background-color: #f2f2f2;
font-family: Arial, sans-serif;
}
h1 {
margin: 20px 0 0 20px;
color: #555;
}
#dropzone {
border: 5px dashed #ccc;
padding: 20px;
margin: 20px;
text-align: center;
cursor: pointer;
}
#image {
max-width: 100%;
display: none;
}
</style>
</head>
<body>
<h1>画像補正アプリ</h1>
<div id="dropzone">ここに画像をドラッグ&ドロップしてください</div>
<img id="image">
<script>
const dropzone = document.getElementById('dropzone');
const image = document.getElementById('image');
dropzone.addEventListener('dragover', function(e) {
e.preventDefault();
dropzone.style.borderColor = '#0077ff';
});
dropzone.addEventListener('dragleave', function(e) {
e.preventDefault();
dropzone.style.borderColor = '#ccc';
});
dropzone.addEventListener('drop', function(e) {
e.preventDefault();
dropzone.style.borderColor = '#ccc';
const file = e.dataTransfer.files[0];
const reader = new FileReader();
reader.addEventListener('load', function() {
const imgData = reader.result;
image.src = imgData;
image.style.display = 'block';
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();
img.addEventListener('load', function() {
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0);
const imageData = ctx.getImageData(0, 0, img.width, img.height);
const data = imageData.data;
for (let i = 0; i < data.length; i += 4) {
const r = data[i];
const g = data[i + 1];
const b = data[i + 2];
// 明るさムラ補正
const avg = (r + g + b) / 3;
const diffR = r - avg;
const diffG = g - avg;
const diffB = b - avg;
data[i] = r - diffR;
data[i + 1] = g - diffG;
data[i + 2] = b - diffB;
// ホワイトバランス調整
data[i] = data[i] * 1.2;
data[i + 1] = data[i + 1] * 1.1;
data[i + 2] = data[i + 2] * 0.9;
// ガンマ補正
data[i] = Math.pow(data[i] / 255, 1.3) * 255;
data[i + 1] = Math.pow(data[i + 1] / 255, 1.3) * 255;
data[i + 2] = Math.pow(data[i + 2] / 255, 1.3) * 255;
}
ctx.putImageData(imageData, 0, 0);
const newImgData = canvas.toDataURL('image/jpeg', 0.9);
image.src = newImgData;
});
img.src = imgData;
});
reader.readAsDataURL(file);
});
</script>
</body>
</html>
(ジョーク:明るさムラ補正は、パン屋さんがたまにやっている「しっかり焼きあがった部分には大根おろしを塗って食べる」という補正と同じような効果があります)