Keep same to calculate changes based on Aperture only.
Calculating Required Shutter Speed…
Required Shutter Speed
—
Understanding Equivalent Exposure
In photography, achieving the perfect exposure is a balancing act known as the Exposure Triangle. This triangle consists of three pillars: Aperture (f-stop), Shutter Speed, and ISO. An "equivalent exposure" occurs when you change one of these settings but adjust the others to maintain the exact same amount of total light hitting the sensor.
When to Use This Calculator
This tool is essential for photographers in several scenarios:
Long Exposure Photography: When you add a Neutral Density (ND) filter or stop down your aperture to blur water or clouds, you need to calculate exactly how much longer your shutter must stay open.
Depth of Field Adjustments: If you want to change your aperture from f/2.8 to f/8 for a sharper background, you must slow down your shutter speed or increase ISO to prevent the image from becoming too dark.
Freezing Motion: To freeze a fast-moving subject, you might increase shutter speed from 1/60 to 1/1000. This calculator helps you determine how much you need to open your aperture or raise your ISO to compensate.
The Logic Behind the Math
The calculation relies on the physics of light stops. A "stop" represents a doubling or halving of light.
Example Scenario:
Current Settings: f/5.6, 1/125 sec, ISO 100.
You want to change your Aperture to f/11 (letting in less light) while keeping ISO at 100.
Calculation: f/11 is 2 stops darker than f/5.6. To compensate, you need to make the shutter speed 2 stops brighter (longer).
1/125 → 1/60 (1 stop) → 1/30 sec (2 stops).
Inputs Explained
Aperture (f-stop): Controls depth of field and light volume. Lower numbers (f/1.8) let in more light; higher numbers (f/16) let in less.
Shutter Speed: The duration the sensor is exposed. This calculator accepts standard fractions (e.g., 1/200) or decimal seconds (e.g., 0.5).
ISO: The sensor's sensitivity to light. Doubling the ISO (100 to 200) doubles the exposure brightness.
function calculateEquivalentExposure() {
// 1. Get DOM elements
var currApertureEl = document.getElementById('curr_aperture');
var currShutterEl = document.getElementById('curr_shutter');
var currIsoEl = document.getElementById('curr_iso');
var newApertureEl = document.getElementById('new_aperture');
var newIsoEl = document.getElementById('new_iso');
var resultBox = document.getElementById('ee-result');
var resultValue = document.getElementById('result-shutter');
var resultDetail = document.getElementById('result-detail');
var errorMsg = document.getElementById('ee-error-msg');
// 2. Parse Inputs
var a1 = parseFloat(currApertureEl.value);
var i1 = parseFloat(currIsoEl.value);
var a2 = parseFloat(newApertureEl.value);
var i2 = parseFloat(newIsoEl.value);
// Handle Shutter Speed Input (Fraction or Decimal)
var s1_raw = currShutterEl.value.trim();
var s1 = 0;
// Reset display
errorMsg.style.display = 'none';
resultBox.style.display = 'none';
// 3. Validation
if (isNaN(a1) || isNaN(i1) || isNaN(a2) || isNaN(i2) || s1_raw === "") {
errorMsg.innerText = "Please enter valid numbers for all fields.";
errorMsg.style.display = 'block';
return;
}
// Parse shutter logic
try {
if (s1_raw.includes('/')) {
var parts = s1_raw.split('/');
if (parts.length === 2) {
s1 = parseFloat(parts[0]) / parseFloat(parts[1]);
} else {
throw "Invalid fraction";
}
} else {
s1 = parseFloat(s1_raw);
}
} catch (e) {
errorMsg.innerText = "Invalid Shutter Speed format. Use decimals (0.5) or fractions (1/60).";
errorMsg.style.display = 'block';
return;
}
if (isNaN(s1) || s1 A1), image gets darker, S2 must increase (longer time). (Ratio > 1) matches.
// If ISO increases (I2 > I1), image gets brighter, S2 must decrease (shorter time). (Ratio = 1) {
// If 1 second or longer, show as decimal with "s" or raw seconds
// Round to 1 decimal place if large, or 2 if small
if (s2 % 1 === 0) {
displayShutter = s2 + " sec";
} else {
displayShutter = s2.toFixed(1) + " sec";
}
} else {
// Convert decimal back to standard fraction (1/x)
var denominator = 1 / s2;
// Round denominator to nearest standard stop-ish number for display cleanliness
// But strict math is better for a calculator. Let's round to nearest whole number.
var roundedDenom = Math.round(denominator);
if (roundedDenom === 0) {
// Extremely long exposure? unlikely with logic < 1
displayShutter = s2.toFixed(4) + " sec";
} else {
displayShutter = "1/" + roundedDenom + " sec";
}
}
// Calculate Stops difference for context
// Stops = Log2(S2/S1)
var stopsDiff = Math.log2(s2 / s1);
var stopsText = "";
if (Math.abs(stopsDiff) 0 ? "slower" : "faster";
stopsText = Math.abs(stopsDiff).toFixed(1) + " stops " + direction + " than original.";
}
// 6. Display Result
resultValue.innerText = displayShutter;
resultDetail.innerText = "Logic: " + stopsText;
resultBox.style.display = 'block';
}