@jjlmoya/utils-audiovisual 1.17.0 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/category/index.ts +2 -0
- package/src/entries.ts +4 -1
- package/src/index.ts +1 -0
- package/src/pages/[locale]/[slug].astro +28 -12
- package/src/tests/locale_completeness.test.ts +2 -36
- package/src/tests/shared-test-helpers.ts +56 -0
- package/src/tests/tool_exports.test.ts +34 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/chromaticLens/bibliography.ts +12 -0
- package/src/tool/chromaticLens/entry.ts +2 -0
- package/src/tool/chromaticLens/i18n/de.ts +1 -15
- package/src/tool/chromaticLens/i18n/en.ts +1 -15
- package/src/tool/chromaticLens/i18n/es.ts +1 -13
- package/src/tool/chromaticLens/i18n/fr.ts +1 -13
- package/src/tool/chromaticLens/i18n/id.ts +1 -15
- package/src/tool/chromaticLens/i18n/it.ts +1 -15
- package/src/tool/chromaticLens/i18n/ja.ts +1 -15
- package/src/tool/chromaticLens/i18n/ko.ts +1 -15
- package/src/tool/chromaticLens/i18n/nl.ts +1 -15
- package/src/tool/chromaticLens/i18n/pl.ts +1 -15
- package/src/tool/chromaticLens/i18n/pt.ts +1 -15
- package/src/tool/chromaticLens/i18n/ru.ts +1 -15
- package/src/tool/chromaticLens/i18n/sv.ts +1 -15
- package/src/tool/chromaticLens/i18n/tr.ts +1 -15
- package/src/tool/chromaticLens/i18n/zh.ts +1 -15
- package/src/tool/chromaticLens/seo.astro +1 -1
- package/src/tool/collageMaker/bibliography.ts +8 -0
- package/src/tool/collageMaker/entry.ts +2 -0
- package/src/tool/collageMaker/i18n/de.ts +1 -11
- package/src/tool/collageMaker/i18n/en.ts +1 -11
- package/src/tool/collageMaker/i18n/es.ts +1 -9
- package/src/tool/collageMaker/i18n/fr.ts +1 -9
- package/src/tool/collageMaker/i18n/id.ts +1 -11
- package/src/tool/collageMaker/i18n/it.ts +1 -11
- package/src/tool/collageMaker/i18n/ja.ts +1 -11
- package/src/tool/collageMaker/i18n/ko.ts +1 -11
- package/src/tool/collageMaker/i18n/nl.ts +1 -11
- package/src/tool/collageMaker/i18n/pl.ts +1 -11
- package/src/tool/collageMaker/i18n/pt.ts +1 -11
- package/src/tool/collageMaker/i18n/ru.ts +1 -11
- package/src/tool/collageMaker/i18n/sv.ts +1 -11
- package/src/tool/collageMaker/i18n/tr.ts +1 -11
- package/src/tool/collageMaker/i18n/zh.ts +1 -11
- package/src/tool/collageMaker/seo.astro +1 -1
- package/src/tool/depthOfFieldCalculator/bibliography.astro +15 -0
- package/src/tool/depthOfFieldCalculator/bibliography.ts +20 -0
- package/src/tool/depthOfFieldCalculator/component.astro +341 -0
- package/src/tool/depthOfFieldCalculator/depth-of-field-calculator.css +417 -0
- package/src/tool/depthOfFieldCalculator/entry.ts +52 -0
- package/src/tool/depthOfFieldCalculator/i18n/de.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/en.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/es.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/fr.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/id.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/it.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/ja.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/ko.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/nl.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/pl.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/pt.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/ru.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/sv.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/tr.ts +141 -0
- package/src/tool/depthOfFieldCalculator/i18n/zh.ts +141 -0
- package/src/tool/depthOfFieldCalculator/index.ts +10 -0
- package/src/tool/depthOfFieldCalculator/logic.ts +91 -0
- package/src/tool/depthOfFieldCalculator/seo.astro +15 -0
- package/src/tool/exifCleaner/bibliography.ts +12 -0
- package/src/tool/exifCleaner/entry.ts +2 -0
- package/src/tool/exifCleaner/i18n/de.ts +1 -15
- package/src/tool/exifCleaner/i18n/en.ts +1 -15
- package/src/tool/exifCleaner/i18n/es.ts +1 -15
- package/src/tool/exifCleaner/i18n/fr.ts +1 -15
- package/src/tool/exifCleaner/i18n/id.ts +1 -15
- package/src/tool/exifCleaner/i18n/it.ts +1 -15
- package/src/tool/exifCleaner/i18n/ja.ts +1 -15
- package/src/tool/exifCleaner/i18n/ko.ts +1 -15
- package/src/tool/exifCleaner/i18n/nl.ts +1 -15
- package/src/tool/exifCleaner/i18n/pl.ts +1 -15
- package/src/tool/exifCleaner/i18n/pt.ts +1 -15
- package/src/tool/exifCleaner/i18n/ru.ts +1 -15
- package/src/tool/exifCleaner/i18n/sv.ts +1 -15
- package/src/tool/exifCleaner/i18n/tr.ts +1 -15
- package/src/tool/exifCleaner/i18n/zh.ts +1 -15
- package/src/tool/exifCleaner/seo.astro +2 -5
- package/src/tool/imageCompressor/bibliography.ts +12 -0
- package/src/tool/imageCompressor/entry.ts +2 -0
- package/src/tool/imageCompressor/i18n/de.ts +1 -15
- package/src/tool/imageCompressor/i18n/en.ts +1 -15
- package/src/tool/imageCompressor/i18n/es.ts +1 -13
- package/src/tool/imageCompressor/i18n/fr.ts +1 -13
- package/src/tool/imageCompressor/i18n/id.ts +1 -15
- package/src/tool/imageCompressor/i18n/it.ts +1 -15
- package/src/tool/imageCompressor/i18n/ja.ts +1 -15
- package/src/tool/imageCompressor/i18n/ko.ts +1 -15
- package/src/tool/imageCompressor/i18n/nl.ts +1 -15
- package/src/tool/imageCompressor/i18n/pl.ts +1 -15
- package/src/tool/imageCompressor/i18n/pt.ts +1 -15
- package/src/tool/imageCompressor/i18n/ru.ts +1 -15
- package/src/tool/imageCompressor/i18n/sv.ts +1 -15
- package/src/tool/imageCompressor/i18n/tr.ts +1 -15
- package/src/tool/imageCompressor/i18n/zh.ts +1 -15
- package/src/tool/imageCompressor/seo.astro +1 -1
- package/src/tool/printQualityCalculator/bibliography.ts +12 -0
- package/src/tool/printQualityCalculator/entry.ts +2 -0
- package/src/tool/printQualityCalculator/i18n/de.ts +1 -15
- package/src/tool/printQualityCalculator/i18n/en.ts +1 -15
- package/src/tool/printQualityCalculator/i18n/es.ts +1 -13
- package/src/tool/printQualityCalculator/i18n/fr.ts +1 -13
- package/src/tool/printQualityCalculator/i18n/id.ts +1 -15
- package/src/tool/printQualityCalculator/i18n/it.ts +1 -15
- package/src/tool/printQualityCalculator/i18n/ja.ts +1 -15
- package/src/tool/printQualityCalculator/i18n/ko.ts +1 -15
- package/src/tool/printQualityCalculator/i18n/nl.ts +1 -15
- package/src/tool/printQualityCalculator/i18n/pl.ts +1 -15
- package/src/tool/printQualityCalculator/i18n/pt.ts +1 -15
- package/src/tool/printQualityCalculator/i18n/ru.ts +1 -15
- package/src/tool/printQualityCalculator/i18n/sv.ts +1 -15
- package/src/tool/printQualityCalculator/i18n/tr.ts +1 -15
- package/src/tool/printQualityCalculator/i18n/zh.ts +1 -15
- package/src/tool/printQualityCalculator/seo.astro +2 -5
- package/src/tool/privacyBlur/bibliography.ts +8 -0
- package/src/tool/privacyBlur/entry.ts +2 -0
- package/src/tool/privacyBlur/i18n/de.ts +1 -11
- package/src/tool/privacyBlur/i18n/en.ts +1 -11
- package/src/tool/privacyBlur/i18n/es.ts +1 -9
- package/src/tool/privacyBlur/i18n/fr.ts +1 -9
- package/src/tool/privacyBlur/i18n/id.ts +1 -11
- package/src/tool/privacyBlur/i18n/it.ts +1 -11
- package/src/tool/privacyBlur/i18n/ja.ts +1 -11
- package/src/tool/privacyBlur/i18n/ko.ts +1 -11
- package/src/tool/privacyBlur/i18n/nl.ts +1 -11
- package/src/tool/privacyBlur/i18n/pl.ts +1 -11
- package/src/tool/privacyBlur/i18n/pt.ts +1 -11
- package/src/tool/privacyBlur/i18n/ru.ts +1 -11
- package/src/tool/privacyBlur/i18n/sv.ts +1 -11
- package/src/tool/privacyBlur/i18n/tr.ts +1 -11
- package/src/tool/privacyBlur/i18n/zh.ts +1 -11
- package/src/tool/privacyBlur/seo.astro +1 -1
- package/src/tool/subtitleSync/bibliography.ts +12 -0
- package/src/tool/subtitleSync/entry.ts +2 -0
- package/src/tool/subtitleSync/i18n/de.ts +1 -13
- package/src/tool/subtitleSync/i18n/en.ts +1 -13
- package/src/tool/subtitleSync/i18n/es.ts +1 -13
- package/src/tool/subtitleSync/i18n/fr.ts +1 -13
- package/src/tool/subtitleSync/i18n/id.ts +1 -13
- package/src/tool/subtitleSync/i18n/it.ts +1 -13
- package/src/tool/subtitleSync/i18n/ja.ts +1 -13
- package/src/tool/subtitleSync/i18n/ko.ts +1 -13
- package/src/tool/subtitleSync/i18n/nl.ts +1 -13
- package/src/tool/subtitleSync/i18n/pl.ts +1 -13
- package/src/tool/subtitleSync/i18n/pt.ts +1 -13
- package/src/tool/subtitleSync/i18n/ru.ts +1 -13
- package/src/tool/subtitleSync/i18n/sv.ts +1 -13
- package/src/tool/subtitleSync/i18n/tr.ts +1 -13
- package/src/tool/subtitleSync/i18n/zh.ts +1 -13
- package/src/tool/subtitleSync/seo.astro +1 -1
- package/src/tool/timelapseCalculator/bibliography.ts +20 -0
- package/src/tool/timelapseCalculator/entry.ts +2 -0
- package/src/tool/timelapseCalculator/i18n/de.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/en.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/es.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/fr.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/id.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/it.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/ja.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/ko.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/nl.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/pl.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/pt.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/ru.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/sv.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/tr.ts +1 -21
- package/src/tool/timelapseCalculator/i18n/zh.ts +1 -21
- package/src/tool/timelapseCalculator/seo.astro +2 -5
- package/src/tool/tvDistance/bibliography.ts +12 -0
- package/src/tool/tvDistance/entry.ts +2 -0
- package/src/tool/tvDistance/i18n/de.ts +1 -13
- package/src/tool/tvDistance/i18n/en.ts +1 -13
- package/src/tool/tvDistance/i18n/es.ts +1 -13
- package/src/tool/tvDistance/i18n/fr.ts +1 -13
- package/src/tool/tvDistance/i18n/id.ts +1 -13
- package/src/tool/tvDistance/i18n/it.ts +1 -13
- package/src/tool/tvDistance/i18n/ja.ts +1 -13
- package/src/tool/tvDistance/i18n/ko.ts +1 -13
- package/src/tool/tvDistance/i18n/nl.ts +1 -13
- package/src/tool/tvDistance/i18n/pl.ts +1 -13
- package/src/tool/tvDistance/i18n/pt.ts +1 -13
- package/src/tool/tvDistance/i18n/ru.ts +1 -13
- package/src/tool/tvDistance/i18n/sv.ts +1 -13
- package/src/tool/tvDistance/i18n/tr.ts +1 -13
- package/src/tool/tvDistance/i18n/zh.ts +1 -13
- package/src/tool/tvDistance/seo.astro +1 -1
- package/src/tool/videoFrameExtractor/bibliography.ts +8 -0
- package/src/tool/videoFrameExtractor/entry.ts +2 -0
- package/src/tool/videoFrameExtractor/i18n/de.ts +1 -9
- package/src/tool/videoFrameExtractor/i18n/en.ts +1 -9
- package/src/tool/videoFrameExtractor/i18n/es.ts +1 -9
- package/src/tool/videoFrameExtractor/i18n/fr.ts +1 -8
- package/src/tool/videoFrameExtractor/i18n/id.ts +1 -9
- package/src/tool/videoFrameExtractor/i18n/it.ts +1 -8
- package/src/tool/videoFrameExtractor/i18n/ja.ts +1 -9
- package/src/tool/videoFrameExtractor/i18n/ko.ts +1 -9
- package/src/tool/videoFrameExtractor/i18n/nl.ts +1 -9
- package/src/tool/videoFrameExtractor/i18n/pl.ts +1 -9
- package/src/tool/videoFrameExtractor/i18n/pt.ts +1 -9
- package/src/tool/videoFrameExtractor/i18n/ru.ts +1 -9
- package/src/tool/videoFrameExtractor/i18n/sv.ts +1 -9
- package/src/tool/videoFrameExtractor/i18n/tr.ts +1 -9
- package/src/tool/videoFrameExtractor/i18n/zh.ts +1 -9
- package/src/tool/videoFrameExtractor/seo.astro +1 -1
- package/src/tools.ts +2 -0
- package/src/types.ts +0 -2
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
|
+
import type { DepthOfFieldUI, DepthOfFieldLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'depth-of-field-calculator';
|
|
6
|
+
const title = 'Depth of Field Calculator: Realtime DoF for Any Camera';
|
|
7
|
+
const description = 'Calculate depth of field, hyperfocal distance, and near/far focus limits in real time. Supports all sensor sizes with 1/3 stop aperture precision.';
|
|
8
|
+
|
|
9
|
+
const ui: DepthOfFieldUI = {
|
|
10
|
+
title: 'Depth of Field Calculator',
|
|
11
|
+
paramsTitle: 'Parameters',
|
|
12
|
+
sensorLabel: 'Camera Sensor',
|
|
13
|
+
moreLabel: 'More sensors…',
|
|
14
|
+
apertureLabel: 'Aperture',
|
|
15
|
+
focalLabel: 'Focal Length',
|
|
16
|
+
distanceLabel: 'Subject Distance',
|
|
17
|
+
metersLabel: 'm',
|
|
18
|
+
feetLabel: 'ft',
|
|
19
|
+
resultsTitle: 'Results',
|
|
20
|
+
totalDofLabel: 'Total Depth of Field',
|
|
21
|
+
infiniteLabel: 'Infinite',
|
|
22
|
+
nearLimitLabel: 'Near Limit',
|
|
23
|
+
farLimitLabel: 'Far Limit',
|
|
24
|
+
hyperfocalLabel: 'Hyperfocal',
|
|
25
|
+
cocLabel: 'Circle of Confusion',
|
|
26
|
+
cocUnit: 'mm',
|
|
27
|
+
showDetailsLabel: 'Show technical details',
|
|
28
|
+
hideDetailsLabel: 'Hide technical details',
|
|
29
|
+
errorBelowFocal: 'Subject distance must be greater than the focal length.',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const faq: DepthOfFieldLocaleContent['faq'] = [
|
|
33
|
+
{
|
|
34
|
+
question: 'What is depth of field?',
|
|
35
|
+
answer: 'Depth of field (DoF) is the range of distance in a scene that appears acceptably sharp in the final image. It is determined by aperture, focal length, subject distance, and sensor size.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'What is the hyperfocal distance?',
|
|
39
|
+
answer: 'The hyperfocal distance is the closest focusing distance at which objects at infinity are still acceptably sharp. Focusing at this distance maximises the depth of field for a given aperture and focal length.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
question: 'Why does a larger aperture (smaller f-number) reduce DoF?',
|
|
43
|
+
answer: 'A wider aperture collects light over a larger area of the lens, which increases the size of the circle of confusion for out-of-focus points. This narrows the zone of acceptable sharpness — the depth of field.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
question: 'How does sensor size affect depth of field?',
|
|
47
|
+
answer: 'Larger sensors use a larger circle of confusion threshold, which effectively increases the apparent DoF for the same field of view. However, when comparing equivalent fields of view, larger sensors generally produce shallower DoF because they require longer focal lengths.',
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const howTo: DepthOfFieldLocaleContent['howTo'] = [
|
|
52
|
+
{
|
|
53
|
+
name: 'Select your camera sensor',
|
|
54
|
+
text: 'Choose the sensor format that matches your camera body. This sets the circle of confusion (CoC) value used in all calculations.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Set aperture and focal length',
|
|
58
|
+
text: 'Drag the aperture slider to choose an f-stop in 1/3-stop increments. Drag the focal length slider — it uses a logarithmic scale so wide-angle changes are more granular.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Set the subject distance',
|
|
62
|
+
text: 'Drag the subject distance slider to the distance between your camera and the main subject. Toggle between metres and feet as needed — your last choice is remembered.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'Read the results',
|
|
66
|
+
text: 'The Focus Bar visualises the sharp zone around your subject. The near and far limits show the exact boundaries of acceptable focus, and the hyperfocal distance tells you where to focus to maximise background sharpness.',
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const seo: DepthOfFieldLocaleContent['seo'] = [
|
|
71
|
+
{ type: 'title', text: 'Understanding Depth of Field in Photography and Cinema', level: 2 },
|
|
72
|
+
{ type: 'paragraph', html: 'Depth of field is one of the most powerful creative tools available to photographers and cinematographers. A <strong>shallow depth of field</strong> isolates subjects from distracting backgrounds, while a <strong>deep depth of field</strong> keeps an entire landscape sharp from foreground to horizon. This calculator gives you precise control over both.' },
|
|
73
|
+
|
|
74
|
+
{ type: 'title', text: 'The Three Variables That Control DoF', level: 3 },
|
|
75
|
+
{ type: 'table', headers: ['Variable', 'Increase →', 'Effect on DoF'], rows: [
|
|
76
|
+
['Aperture', 'f/1.4 → f/16', 'Wider aperture = shallower DoF'],
|
|
77
|
+
['Focal Length', '24mm → 200mm', 'Longer focal = shallower DoF at same distance'],
|
|
78
|
+
['Subject Distance', '1m → 10m', 'Further subject = deeper DoF'],
|
|
79
|
+
]},
|
|
80
|
+
|
|
81
|
+
{ type: 'title', text: 'The Hyperfocal Distance: Maximum Sharpness', level: 3 },
|
|
82
|
+
{ type: 'paragraph', html: 'When you focus at the <strong>hyperfocal distance</strong>, everything from half that distance to infinity appears acceptably sharp. Landscape photographers use this technique to ensure both a foreground rock and distant mountains are in focus simultaneously.' },
|
|
83
|
+
{ type: 'tip', title: 'Practical tip', html: 'For street photography, set your focus to the hyperfocal distance and shoot without looking through the viewfinder. With a 35mm lens on APS-C at f/8, the hyperfocal distance is roughly <strong>4 metres</strong> — everything from 2m to infinity will be sharp.' },
|
|
84
|
+
|
|
85
|
+
{ type: 'title', text: 'Sensor Size and the Circle of Confusion', level: 3 },
|
|
86
|
+
{ type: 'paragraph', html: 'The <strong>circle of confusion (CoC)</strong> is the threshold that defines "acceptable sharpness" for a given sensor format. A Full Frame sensor has a CoC of 0.030mm; a smartphone sensor uses ~0.006mm. Smaller CoC values mean stricter sharpness criteria and, consequently, shallower perceived depth of field.' },
|
|
87
|
+
{ type: 'stats', columns: 3, items: [
|
|
88
|
+
{ label: 'Full Frame', value: '0.030 mm', icon: 'mdi:camera' },
|
|
89
|
+
{ label: 'APS-C', value: '0.019 mm', icon: 'mdi:camera-outline' },
|
|
90
|
+
{ label: 'Smartphone', value: '0.006 mm', icon: 'mdi:cellphone' },
|
|
91
|
+
]},
|
|
92
|
+
|
|
93
|
+
{ type: 'title', text: 'DoF in Cinema: Focal Length vs. Sensor', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: 'Cinematographers shooting on Super 35 (close to APS-C) frequently use longer focal lengths to compress perspective, which also narrows DoF and creates the characteristic "cinematic look". The combination of a fast prime (f/1.4–f/2.8) and a 85mm+ focal length at portrait distances is the classic recipe.' },
|
|
95
|
+
{ type: 'diagnostic', variant: 'success', title: 'The Focus Distribution Rule', icon: 'mdi:lightbulb-outline', badge: 'Pro Technique', html: 'For a subject at 3 metres with a 50mm lens at f/2.8 on Full Frame: near limit ≈ 2.73m, far limit ≈ 3.33m, total DoF ≈ 60cm. The back zone is always larger than the front zone — roughly <strong>2:1 ratio</strong> for most real-world distances.' },
|
|
96
|
+
];
|
|
97
|
+
|
|
98
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
99
|
+
'@context': 'https://schema.org',
|
|
100
|
+
'@type': 'FAQPage',
|
|
101
|
+
mainEntity: faq.map((item) => ({
|
|
102
|
+
'@type': 'Question',
|
|
103
|
+
name: item.question,
|
|
104
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
105
|
+
})),
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const howToSchema: WithContext<HowTo> = {
|
|
109
|
+
'@context': 'https://schema.org',
|
|
110
|
+
'@type': 'HowTo',
|
|
111
|
+
name: title,
|
|
112
|
+
description,
|
|
113
|
+
step: howTo.map((step) => ({
|
|
114
|
+
'@type': 'HowToStep',
|
|
115
|
+
name: step.name,
|
|
116
|
+
text: step.text,
|
|
117
|
+
})),
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
121
|
+
'@context': 'https://schema.org',
|
|
122
|
+
'@type': 'SoftwareApplication',
|
|
123
|
+
name: title,
|
|
124
|
+
description,
|
|
125
|
+
applicationCategory: 'UtilitiesApplication',
|
|
126
|
+
operatingSystem: 'Web',
|
|
127
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
128
|
+
inLanguage: 'en',
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
export const content: DepthOfFieldLocaleContent = {
|
|
132
|
+
slug,
|
|
133
|
+
title,
|
|
134
|
+
description,
|
|
135
|
+
ui,
|
|
136
|
+
seo,
|
|
137
|
+
faq,
|
|
138
|
+
bibliography,
|
|
139
|
+
howTo,
|
|
140
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
141
|
+
};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
|
+
import type { DepthOfFieldUI, DepthOfFieldLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'calculadora-profundidad-de-campo';
|
|
6
|
+
const title = 'Calculadora de Profundidad de Campo: DoF en Tiempo Real';
|
|
7
|
+
const description = 'Calcula la profundidad de campo, la distancia hiperfocal y los límites de enfoque en tiempo real. Compatible con todos los sensores y precisión de 1/3 de paso.';
|
|
8
|
+
|
|
9
|
+
const ui: DepthOfFieldUI = {
|
|
10
|
+
title: 'Profundidad de Campo',
|
|
11
|
+
paramsTitle: 'Parámetros',
|
|
12
|
+
sensorLabel: 'Sensor de la Cámara',
|
|
13
|
+
moreLabel: 'Más sensores…',
|
|
14
|
+
apertureLabel: 'Apertura',
|
|
15
|
+
focalLabel: 'Distancia Focal',
|
|
16
|
+
distanceLabel: 'Distancia al Sujeto',
|
|
17
|
+
metersLabel: 'm',
|
|
18
|
+
feetLabel: 'ft',
|
|
19
|
+
resultsTitle: 'Resultados',
|
|
20
|
+
totalDofLabel: 'Profundidad de Campo Total',
|
|
21
|
+
infiniteLabel: 'Infinito',
|
|
22
|
+
nearLimitLabel: 'Límite Cercano',
|
|
23
|
+
farLimitLabel: 'Límite Lejano',
|
|
24
|
+
hyperfocalLabel: 'Hiperfocal',
|
|
25
|
+
cocLabel: 'Círculo de Confusión',
|
|
26
|
+
cocUnit: 'mm',
|
|
27
|
+
showDetailsLabel: 'Mostrar detalles técnicos',
|
|
28
|
+
hideDetailsLabel: 'Ocultar detalles técnicos',
|
|
29
|
+
errorBelowFocal: 'La distancia al sujeto debe ser mayor que la distancia focal.',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const faq: DepthOfFieldLocaleContent['faq'] = [
|
|
33
|
+
{
|
|
34
|
+
question: '¿Qué es la profundidad de campo?',
|
|
35
|
+
answer: 'La profundidad de campo (DoF) es el rango de distancia en una escena que aparece aceptablemente nítido en la imagen final. Se determina por la apertura, la distancia focal, la distancia al sujeto y el tamaño del sensor.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: '¿Qué es la distancia hiperfocal?',
|
|
39
|
+
answer: 'La distancia hiperfocal es la distancia de enfoque más cercana a la cual los objetos en el infinito siguen siendo aceptablemente nítidos. Enfocar a esta distancia maximiza la profundidad de campo para una apertura y distancia focal dadas.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
question: '¿Por qué una apertura mayor (número f más pequeño) reduce la profundidad de campo?',
|
|
43
|
+
answer: 'Una apertura más amplia recoge luz sobre un área más grande del objetivo, lo que aumenta el tamaño del círculo de confusión para los puntos fuera de foco. Esto estrecha la zona de nitidez aceptable: la profundidad de campo.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
question: '¿Cómo afecta el tamaño del sensor a la profundidad de campo?',
|
|
47
|
+
answer: 'Los sensores más grandes utilizan un umbral de círculo de confusión más grande, lo que aumenta efectivamente la profundidad de campo aparente para el mismo campo de visión. Sin embargo, al comparar campos de visión equivalentes, los sensores más grandes generalmente producen una profundidad de campo más reducida porque requieren distancias focales más largas.',
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const howTo: DepthOfFieldLocaleContent['howTo'] = [
|
|
52
|
+
{
|
|
53
|
+
name: 'Selecciona el sensor de tu cámara',
|
|
54
|
+
text: 'Elige el formato de sensor que coincida con el cuerpo de tu cámara. Esto establece el valor del círculo de confusión (CoC) utilizado en todos los cálculos.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Configura la apertura y la distancia focal',
|
|
58
|
+
text: 'Desliza para elegir un paso f en incrementos de 1/3. El carrusel de distancia focal utiliza una escala logarítmica para que los cambios en gran angular sean más granulares.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Ajusta la distancia al sujeto',
|
|
62
|
+
text: 'Indica la distancia entre tu cámara y el sujeto principal. Cambia entre metros y pies según necesites; se recordará tu última elección.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'Lee los resultados',
|
|
66
|
+
text: 'La Barra de Enfoque visualiza la zona nítida alrededor de tu sujeto. Los límites cercano y lejano muestran los bordes de enfoque aceptable, y la distancia hiperfocal te indica dónde enfocar para maximizar la nitidez del fondo.',
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const seo: DepthOfFieldLocaleContent['seo'] = [
|
|
71
|
+
{ type: 'title', text: 'Entendiendo la Profundidad de Campo en Fotografía y Cine', level: 2 },
|
|
72
|
+
{ type: 'paragraph', html: 'La profundidad de campo es una de las herramientas creativas más potentes para fotógrafos y cineastas. Una <strong>profundidad de campo reducida</strong> aisla al sujeto de fondos distractores, mientras que una <strong>profundidad de campo amplia</strong> mantiene nítido todo un paisaje desde el primer plano hasta el horizonte. Esta calculadora te da el control total sobre ambas.' },
|
|
73
|
+
|
|
74
|
+
{ type: 'title', text: 'Las Tres Variables que Controlan la Profundidad de Campo', level: 3 },
|
|
75
|
+
{ type: 'table', headers: ['Variable', 'Incremento →', 'Efecto en DoF'], rows: [
|
|
76
|
+
['Apertura', 'f/1.4 → f/16', 'Apertura más amplia = DoF más reducida'],
|
|
77
|
+
['Distancia Focal', '24mm → 200mm', 'Mayor focal = DoF más reducida a la misma distancia'],
|
|
78
|
+
['Distancia al Sujeto', '1m → 10m', 'Sujeto más lejano = DoF más amplia'],
|
|
79
|
+
]},
|
|
80
|
+
|
|
81
|
+
{ type: 'title', text: 'La Distancia Hiperfocal: Nitidez Máxima', level: 3 },
|
|
82
|
+
{ type: 'paragraph', html: 'Cuando enfocas a la <strong>distancia hiperfocal</strong>, todo desde la mitad de esa distancia hasta el infinito aparecerá aceptablemente nítido. Los fotógrafos de paisajes usan esta técnica para asegurar que tanto una roca en primer plano como las montañas lejanas estén enfocadas simultáneamente.' },
|
|
83
|
+
{ type: 'tip', title: 'Consejo práctico', html: 'Para fotografía callejera, ajusta tu enfoque a la distancia hiperfocal y dispara sin mirar por el visor. Con un objetivo de 35mm en APS-C a f/8, la hiperfocal está a unos <strong>4 metros</strong>: todo desde los 2m hasta el infinito estará nítido.' },
|
|
84
|
+
|
|
85
|
+
{ type: 'title', text: 'Tamaño del Sensor y Círculo de Confusión', level: 3 },
|
|
86
|
+
{ type: 'paragraph', html: 'El <strong>círculo de confusión (CoC)</strong> es el umbral que define la "nitidez aceptable" para un formato de sensor determinado. Un sensor Full Frame tiene un CoC de 0,030 mm; un sensor de smartphone usa ~0,006 mm. Valores de CoC más pequeños implican criterios de nitidez más estrictos y, por tanto, una menor profundidad de campo percibida.' },
|
|
87
|
+
{ type: 'stats', columns: 3, items: [
|
|
88
|
+
{ label: 'Full Frame', value: '0,030 mm', icon: 'mdi:camera' },
|
|
89
|
+
{ label: 'APS-C', value: '0,019 mm', icon: 'mdi:camera-outline' },
|
|
90
|
+
{ label: 'Smartphone', value: '0,006 mm', icon: 'mdi:cellphone' },
|
|
91
|
+
]},
|
|
92
|
+
|
|
93
|
+
{ type: 'title', text: 'La Profundidad de Campo en el Cine: Focal vs. Sensor', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: 'Los cineastas que ruedan en Super 35 (cercano al APS-C) suelen usar distancias focales más largas para comprimir la perspectiva, lo que también reduce la profundidad de campo y crea el característico "look cinematográfico". La combinación de un objetivo luminoso (f/1.4–f/2.8) y una focal de más de 85mm a distancias de retrato es la receta clásica.' },
|
|
95
|
+
{ type: 'diagnostic', variant: 'success', title: 'La Regla de Distribución del Enfoque', icon: 'mdi:lightbulb-outline', badge: 'Técnica Pro', html: 'Para un sujeto a 3 metros con un 50mm a f/2.8 en Full Frame: límite cercano ≈ 2,73m, límite lejano ≈ 3,33m, DoF total ≈ 60cm. La zona trasera siempre es mayor que la delantera, aproximadamente en una <strong>proporción 2:1</strong> para la mayoría de distancias reales.' },
|
|
96
|
+
];
|
|
97
|
+
|
|
98
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
99
|
+
'@context': 'https://schema.org',
|
|
100
|
+
'@type': 'FAQPage',
|
|
101
|
+
mainEntity: faq.map((item) => ({
|
|
102
|
+
'@type': 'Question',
|
|
103
|
+
name: item.question,
|
|
104
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
105
|
+
})),
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const howToSchema: WithContext<HowTo> = {
|
|
109
|
+
'@context': 'https://schema.org',
|
|
110
|
+
'@type': 'HowTo',
|
|
111
|
+
name: title,
|
|
112
|
+
description,
|
|
113
|
+
step: howTo.map((step) => ({
|
|
114
|
+
'@type': 'HowToStep',
|
|
115
|
+
name: step.name,
|
|
116
|
+
text: step.text,
|
|
117
|
+
})),
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
121
|
+
'@context': 'https://schema.org',
|
|
122
|
+
'@type': 'SoftwareApplication',
|
|
123
|
+
name: title,
|
|
124
|
+
description,
|
|
125
|
+
applicationCategory: 'UtilitiesApplication',
|
|
126
|
+
operatingSystem: 'Web',
|
|
127
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
128
|
+
inLanguage: 'es',
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
export const content: DepthOfFieldLocaleContent = {
|
|
132
|
+
slug,
|
|
133
|
+
title,
|
|
134
|
+
description,
|
|
135
|
+
ui,
|
|
136
|
+
seo,
|
|
137
|
+
faq,
|
|
138
|
+
bibliography,
|
|
139
|
+
howTo,
|
|
140
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
141
|
+
};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
|
+
import type { DepthOfFieldUI, DepthOfFieldLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'calculateur-profondeur-de-champ';
|
|
6
|
+
const title = 'Calculateur de Profondeur de Champ : DoF en Temps Réel';
|
|
7
|
+
const description = 'Calculez la profondeur de champ, la distance hyperfocale et les limites de mise au point en temps réel. Compatible avec tous les capteurs.';
|
|
8
|
+
|
|
9
|
+
const ui: DepthOfFieldUI = {
|
|
10
|
+
title: 'Profondeur de Champ',
|
|
11
|
+
paramsTitle: 'Paramètres',
|
|
12
|
+
sensorLabel: 'Capteur de l\'Appareil',
|
|
13
|
+
moreLabel: 'Plus de capteurs…',
|
|
14
|
+
apertureLabel: 'Ouverture',
|
|
15
|
+
focalLabel: 'Distance Focale',
|
|
16
|
+
distanceLabel: 'Distance du Sujet',
|
|
17
|
+
metersLabel: 'm',
|
|
18
|
+
feetLabel: 'ft',
|
|
19
|
+
resultsTitle: 'Résultats',
|
|
20
|
+
totalDofLabel: 'Profondeur de Champ Totale',
|
|
21
|
+
infiniteLabel: 'Infini',
|
|
22
|
+
nearLimitLabel: 'Limite Proche',
|
|
23
|
+
farLimitLabel: 'Limite Lointaine',
|
|
24
|
+
hyperfocalLabel: 'Hyperfocale',
|
|
25
|
+
cocLabel: 'Cercle de Confusion',
|
|
26
|
+
cocUnit: 'mm',
|
|
27
|
+
showDetailsLabel: 'Afficher les détails techniques',
|
|
28
|
+
hideDetailsLabel: 'Masquer les détails techniques',
|
|
29
|
+
errorBelowFocal: 'La distance du sujet doit être supérieure à la distance focale.',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const faq: DepthOfFieldLocaleContent['faq'] = [
|
|
33
|
+
{
|
|
34
|
+
question: 'Qu\'est-ce que la profondeur de champ ?',
|
|
35
|
+
answer: 'La profondeur de champ (DoF) est la plage de distance dans une scène qui apparaît net dans l\'image finale. Elle est déterminée par l\'ouverture, la distance focale, la distance du sujet et la taille du capteur.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'Qu\'est-ce que la distance hyperfocale ?',
|
|
39
|
+
answer: 'La distance hyperfocale est la distance de mise au point la plus proche pour laquelle les objets à l\'infini sont encore nets. Faire la mise au point à cette distance maximise la profondeur de champ pour une ouverture et une focale données.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
question: 'Pourquoi une grande ouverture réduit-elle la profondeur de champ ?',
|
|
43
|
+
answer: 'Une ouverture plus grande collecte la lumière sur une plus grande surface de l\'objectif, ce qui augmente la taille du cercle de confusion pour les points hors champ. Cela réduit la zone de netteté acceptable.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
question: 'Comment la taille du capteur affecte-t-elle la profondeur de champ ?',
|
|
47
|
+
answer: 'Les grands capteurs ont un seuil de cercle de confusion plus élevé, ce qui augmente la DoF apparente pour un même champ de vision. Cependant, à champ de vision équivalent, ils produisent souvent une DoF plus faible car ils nécessitent des focales plus longues.',
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const howTo: DepthOfFieldLocaleContent['howTo'] = [
|
|
52
|
+
{
|
|
53
|
+
name: 'Sélectionnez votre capteur',
|
|
54
|
+
text: 'Choisissez le format de capteur qui correspond à votre boîtier. Cela définit la valeur du cercle de confusion (CoC) utilisée pour les calculs.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Réglez l\'ouverture et la focale',
|
|
58
|
+
text: 'Faites glisser pour choisir un diaphragme par paliers de 1/3. Le curseur de focale utilise une échelle logarithmique pour plus de précision en grand-angle.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Définissez la distance du sujet',
|
|
62
|
+
text: 'Indiquez la distance entre l\'appareil et votre sujet principal. Basculez entre mètres et pieds selon vos besoins.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'Consultez les résultats',
|
|
66
|
+
text: 'La barre de mise au point visualise la zone de netteté. Les limites proche et lointaine indiquent les bornes exactes de la zone nette.',
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const seo: DepthOfFieldLocaleContent['seo'] = [
|
|
71
|
+
{ type: 'title', text: 'Comprendre la Profondeur de Champ en Photographie et Cinéma', level: 2 },
|
|
72
|
+
{ type: 'paragraph', html: 'La profondeur de champ est l\'un des outils créatifs les plus puissants. Une <strong>faible profondeur de champ</strong> isole votre sujet, tandis qu\'une <strong>grande profondeur de champ</strong> garde tout un paysage net. Ce calculateur vous offre un contrôle précis.' },
|
|
73
|
+
|
|
74
|
+
{ type: 'title', text: 'Les Trois Variables du Contrôle DoF', level: 3 },
|
|
75
|
+
{ type: 'table', headers: ['Variable', 'Augmentation →', 'Effet sur la DoF'], rows: [
|
|
76
|
+
['Ouverture', 'f/1.4 → f/16', 'Ouverture plus grande = DoF plus courte'],
|
|
77
|
+
['Distance Focale', '24mm → 200mm', 'Focale plus longue = DoF plus courte à même distance'],
|
|
78
|
+
['Distance du Sujet', '1m → 10m', 'Sujet plus loin = DoF plus grande'],
|
|
79
|
+
]},
|
|
80
|
+
|
|
81
|
+
{ type: 'title', text: 'La Distance Hyperfocale : Netteté Maximale', level: 3 },
|
|
82
|
+
{ type: 'paragraph', html: 'En réglant la mise au point sur la <strong>distance hyperfocale</strong>, tout ce qui se trouve entre la moitié de cette distance et l\'infini sera net. Idéal pour les paysages.' },
|
|
83
|
+
{ type: 'tip', title: 'Conseil pratique', html: 'Pour la photo de rue, réglez votre mise au point sur l\'hyperfocale. Avec un 35mm sur APS-C à f/8, l\'hyperfocale est à environ <strong>4 mètres</strong> : tout sera net de 2m à l\'infini.' },
|
|
84
|
+
|
|
85
|
+
{ type: 'title', text: 'Taille du Capteur et Cercle de Confusion', level: 3 },
|
|
86
|
+
{ type: 'paragraph', html: 'Le <strong>cercle de confusion (CoC)</strong> définit la netteté acceptable. Un capteur Plein Format a un CoC de 0,030 mm, contre ~0,006 mm pour un smartphone. Un CoC plus petit signifie des critères de netteté plus stricts.' },
|
|
87
|
+
{ type: 'stats', columns: 3, items: [
|
|
88
|
+
{ label: 'Plein Format', value: '0,030 mm', icon: 'mdi:camera' },
|
|
89
|
+
{ label: 'APS-C', value: '0,019 mm', icon: 'mdi:camera-outline' },
|
|
90
|
+
{ label: 'Smartphone', value: '0,006 mm', icon: 'mdi:cellphone' },
|
|
91
|
+
]},
|
|
92
|
+
|
|
93
|
+
{ type: 'title', text: 'DoF au Cinéma : Focale vs Capteur', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: 'Le tournage en Super 35 utilise souvent des focales plus longues pour compresser la perspective, créant ainsi le "look cinéma". Un objectif lumineux à 85mm est le choix classique pour le portrait.' },
|
|
95
|
+
{ type: 'diagnostic', variant: 'success', title: 'La Règle de Distribution de la Netteté', icon: 'mdi:lightbulb-outline', badge: 'Technique Pro', html: 'Pour un sujet à 3m avec un 50mm à f/2.8 : la zone nette s\'étend vers l\'arrière environ <strong>deux fois plus</strong> que vers l\'avant (ratio 2:1).' },
|
|
96
|
+
];
|
|
97
|
+
|
|
98
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
99
|
+
'@context': 'https://schema.org',
|
|
100
|
+
'@type': 'FAQPage',
|
|
101
|
+
mainEntity: faq.map((item) => ({
|
|
102
|
+
'@type': 'Question',
|
|
103
|
+
name: item.question,
|
|
104
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
105
|
+
})),
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const howToSchema: WithContext<HowTo> = {
|
|
109
|
+
'@context': 'https://schema.org',
|
|
110
|
+
'@type': 'HowTo',
|
|
111
|
+
name: title,
|
|
112
|
+
description,
|
|
113
|
+
step: howTo.map((step) => ({
|
|
114
|
+
'@type': 'HowToStep',
|
|
115
|
+
name: step.name,
|
|
116
|
+
text: step.text,
|
|
117
|
+
})),
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
121
|
+
'@context': 'https://schema.org',
|
|
122
|
+
'@type': 'SoftwareApplication',
|
|
123
|
+
name: title,
|
|
124
|
+
description,
|
|
125
|
+
applicationCategory: 'UtilitiesApplication',
|
|
126
|
+
operatingSystem: 'Web',
|
|
127
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
128
|
+
inLanguage: 'fr',
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
export const content: DepthOfFieldLocaleContent = {
|
|
132
|
+
slug,
|
|
133
|
+
title,
|
|
134
|
+
description,
|
|
135
|
+
ui,
|
|
136
|
+
seo,
|
|
137
|
+
faq,
|
|
138
|
+
bibliography,
|
|
139
|
+
howTo,
|
|
140
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
141
|
+
};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
|
+
import type { DepthOfFieldUI, DepthOfFieldLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'kalkulator-kedalaman-bidang';
|
|
6
|
+
const title = 'Kalkulator Kedalaman Bidang: DoF Realtime untuk Semua Kamera';
|
|
7
|
+
const description = 'Hitung kedalaman bidang, jarak hiperfokal, dan batas fokus secara real-time. Mendukung semua ukuran sensor dengan presisi apertur 1/3 stop.';
|
|
8
|
+
|
|
9
|
+
const ui: DepthOfFieldUI = {
|
|
10
|
+
title: 'Kalkulator Kedalaman Bidang',
|
|
11
|
+
paramsTitle: 'Parameter',
|
|
12
|
+
sensorLabel: 'Sensor Kamera',
|
|
13
|
+
moreLabel: 'Sensor lainnya…',
|
|
14
|
+
apertureLabel: 'Apertur',
|
|
15
|
+
focalLabel: 'Panjang Fokus',
|
|
16
|
+
distanceLabel: 'Jarak Objek',
|
|
17
|
+
metersLabel: 'm',
|
|
18
|
+
feetLabel: 'ft',
|
|
19
|
+
resultsTitle: 'Hasil',
|
|
20
|
+
totalDofLabel: 'Total Kedalaman Bidang',
|
|
21
|
+
infiniteLabel: 'Tak Terhingga',
|
|
22
|
+
nearLimitLabel: 'Batas Dekat',
|
|
23
|
+
farLimitLabel: 'Batas Jauh',
|
|
24
|
+
hyperfocalLabel: 'Hiperfokal',
|
|
25
|
+
cocLabel: 'Circle of Confusion',
|
|
26
|
+
cocUnit: 'mm',
|
|
27
|
+
showDetailsLabel: 'Tampilkan detail teknis',
|
|
28
|
+
hideDetailsLabel: 'Sembunyikan detail teknis',
|
|
29
|
+
errorBelowFocal: 'Jarak objek harus lebih besar dari panjang fokus.',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const faq: DepthOfFieldLocaleContent['faq'] = [
|
|
33
|
+
{
|
|
34
|
+
question: 'Apa itu kedalaman bidang?',
|
|
35
|
+
answer: 'Kedalaman bidang (DoF) adalah rentang jarak dalam sebuah pemandangan yang tampak tajam dalam gambar akhir. Ini ditentukan oleh apertur, panjang fokus, jarak objek, dan ukuran sensor.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'Apa itu jarak hiperfokal?',
|
|
39
|
+
answer: 'Jarak hiperfokal adalah jarak fokus terdekat di mana objek di tak terhingga masih cukup tajam. Fokus pada jarak ini akan memaksimalkan kedalaman bidang.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
question: 'Mengapa apertur yang lebih besar (angka-f kecil) mengurangi DoF?',
|
|
43
|
+
answer: 'Apertur yang lebih lebar mengumpulkan cahaya melalui area lensa yang lebih luas, yang meningkatkan ukuran lingkaran kebingungan (circle of confusion) untuk titik-titik di luar fokus.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
question: 'Bagaimana ukuran sensor memengaruhi kedalaman bidang?',
|
|
47
|
+
answer: 'Sensor yang lebih besar menggunakan ambang batas lingkaran kebingungan yang lebih besar. Namun, untuk bidang pandang yang setara, sensor yang lebih besar biasanya menghasilkan DoF yang lebih tipis.',
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const howTo: DepthOfFieldLocaleContent['howTo'] = [
|
|
52
|
+
{
|
|
53
|
+
name: 'Pilih sensor kamera Anda',
|
|
54
|
+
text: 'Pilih format sensor yang sesuai dengan kamera Anda. Ini menentukan nilai circle of confusion (CoC) yang digunakan dalam perhitungan.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Atur apertur dan panjang fokus',
|
|
58
|
+
text: 'Pilih stop-f dalam kelipatan 1/3. Penggeser panjang fokus menggunakan skala logaritmik untuk presisi yang lebih baik pada sudut lebar.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Atur jarak objek',
|
|
62
|
+
text: 'Tentukan jarak antara kamera dan subjek utama Anda. Ganti antara unit meter dan kaki sesuai kebutuhan.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'Baca hasilnya',
|
|
66
|
+
text: 'Bilah Fokus memvisualisasikan zona tajam di sekitar subjek Anda. Batas dekat dan jauh menunjukkan batas eksak dari fokus yang dapat diterima.',
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const seo: DepthOfFieldLocaleContent['seo'] = [
|
|
71
|
+
{ type: 'title', text: 'Memahami Kedalaman Bidang dalam Fotografi dan Sinema', level: 2 },
|
|
72
|
+
{ type: 'paragraph', html: 'Kedalaman bidang adalah salah satu alat kreatif terkuat yang tersedia. <strong>Kedalaman bidang yang dangkal</strong> mengisolasi subjek, sementara <strong>kedalaman bidang yang dalam</strong> menjaga ketajaman seluruh lanskap.' },
|
|
73
|
+
|
|
74
|
+
{ type: 'title', text: 'Tiga Variabel yang Mengontrol DoF', level: 3 },
|
|
75
|
+
{ type: 'table', headers: ['Variabel', 'Peningkatan →', 'Efek pada DoF'], rows: [
|
|
76
|
+
['Apertur', 'f/1.4 → f/16', 'Apertur lebih lebar = DoF lebih dangkal'],
|
|
77
|
+
['Panjang Fokus', '24mm → 200mm', 'Fokus lebih panjang = DoF lebih dangkal pada jarak yang sama'],
|
|
78
|
+
['Jarak Objek', '1m → 10m', 'Objek lebih jauh = DoF lebih dalam'],
|
|
79
|
+
]},
|
|
80
|
+
|
|
81
|
+
{ type: 'title', text: 'Jarak Hiperfokal: Ketajaman Maksimum', level: 3 },
|
|
82
|
+
{ type: 'paragraph', html: 'Saat Anda fokus pada <strong>jarak hiperfokal</strong>, segala sesuatu dari setengah jarak tersebut hingga tak terhingga akan tampak tajam. Fotografer lanskap sering menggunakan teknik ini.' },
|
|
83
|
+
{ type: 'tip', title: 'Tips praktis', html: 'Untuk fotografi jalanan, atur fokus Anda ke jarak hiperfokal. Dengan lensa 35mm pada APS-C di f/8, jarak hiperfokal adalah sekitar <strong>4 meter</strong>: semuanya dari 2m hingga tak terhingga akan tajam.' },
|
|
84
|
+
|
|
85
|
+
{ type: 'title', text: 'Ukuran Sensor dan Circle of Confusion', level: 3 },
|
|
86
|
+
{ type: 'paragraph', html: '<strong>Circle of confusion (CoC)</strong> adalah ambang batas yang menentukan "ketajaman yang dapat diterima". Sensor Full Frame memiliki CoC 0,030mm; sensor smartphone menggunakan ~0,006mm.' },
|
|
87
|
+
{ type: 'stats', columns: 3, items: [
|
|
88
|
+
{ label: 'Full Frame', value: '0,030 mm', icon: 'mdi:camera' },
|
|
89
|
+
{ label: 'APS-C', value: '0,019 mm', icon: 'mdi:camera-outline' },
|
|
90
|
+
{ label: 'Smartphone', value: '0,006 mm', icon: 'mdi:cellphone' },
|
|
91
|
+
]},
|
|
92
|
+
|
|
93
|
+
{ type: 'title', text: 'DoF dalam Sinema: Panjang Fokus vs Sensor', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: 'Sinematografer yang menggunakan Super 35 sering menggunakan panjang fokus yang lebih panjang untuk mengompresi perspektif, yang juga mempersempit DoF dan menciptakan "tampilan sinematik".' },
|
|
95
|
+
{ type: 'diagnostic', variant: 'success', title: 'Aturan Distribusi Fokus', icon: 'mdi:lightbulb-outline', badge: 'Teknik Pro', html: 'Untuk subjek pada 3 meter dengan lensa 50mm di f/2.8 : zona tajam di belakang subjek selalu lebih besar daripada di depan — kira-kira dengan <strong>rasio 2:1</strong>.' },
|
|
96
|
+
];
|
|
97
|
+
|
|
98
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
99
|
+
'@context': 'https://schema.org',
|
|
100
|
+
'@type': 'FAQPage',
|
|
101
|
+
mainEntity: faq.map((item) => ({
|
|
102
|
+
'@type': 'Question',
|
|
103
|
+
name: item.question,
|
|
104
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
105
|
+
})),
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const howToSchema: WithContext<HowTo> = {
|
|
109
|
+
'@context': 'https://schema.org',
|
|
110
|
+
'@type': 'HowTo',
|
|
111
|
+
name: title,
|
|
112
|
+
description,
|
|
113
|
+
step: howTo.map((step) => ({
|
|
114
|
+
'@type': 'HowToStep',
|
|
115
|
+
name: step.name,
|
|
116
|
+
text: step.text,
|
|
117
|
+
})),
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
121
|
+
'@context': 'https://schema.org',
|
|
122
|
+
'@type': 'SoftwareApplication',
|
|
123
|
+
name: title,
|
|
124
|
+
description,
|
|
125
|
+
applicationCategory: 'UtilitiesApplication',
|
|
126
|
+
operatingSystem: 'Web',
|
|
127
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
128
|
+
inLanguage: 'id',
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
export const content: DepthOfFieldLocaleContent = {
|
|
132
|
+
slug,
|
|
133
|
+
title,
|
|
134
|
+
description,
|
|
135
|
+
ui,
|
|
136
|
+
seo,
|
|
137
|
+
faq,
|
|
138
|
+
bibliography,
|
|
139
|
+
howTo,
|
|
140
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
141
|
+
};
|