@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 = 'kalkulator-glebi-ostrosci';
|
|
6
|
+
const title = 'Kalkulator Głębi Ostrości: DoF w czasie rzeczywistym';
|
|
7
|
+
const description = 'Oblicz głębię ostrości, odległość hiperfokalną i limity ostrości w czasie rzeczywistym. Obsługuje wszystkie rozmiary matryc z precyzją 1/3 stopnia.';
|
|
8
|
+
|
|
9
|
+
const ui: DepthOfFieldUI = {
|
|
10
|
+
title: 'Głębia Ostrości',
|
|
11
|
+
paramsTitle: 'Parametry',
|
|
12
|
+
sensorLabel: 'Matryca Aparatu',
|
|
13
|
+
moreLabel: 'Więcej matryc…',
|
|
14
|
+
apertureLabel: 'Przysłona',
|
|
15
|
+
focalLabel: 'Ogniskowa',
|
|
16
|
+
distanceLabel: 'Odległość od Obiektu',
|
|
17
|
+
metersLabel: 'm',
|
|
18
|
+
feetLabel: 'ft',
|
|
19
|
+
resultsTitle: 'Wyniki',
|
|
20
|
+
totalDofLabel: 'Całkowita Głębia Ostrości',
|
|
21
|
+
infiniteLabel: 'Nieskończoność',
|
|
22
|
+
nearLimitLabel: 'Bliższa Granica',
|
|
23
|
+
farLimitLabel: 'Dalsza Granica',
|
|
24
|
+
hyperfocalLabel: 'Hiperfokalna',
|
|
25
|
+
cocLabel: 'Krążek Rozproszenia',
|
|
26
|
+
cocUnit: 'mm',
|
|
27
|
+
showDetailsLabel: 'Pokaż szczegóły techniczne',
|
|
28
|
+
hideDetailsLabel: 'Ukryj szczegóły techniczne',
|
|
29
|
+
errorBelowFocal: 'Odległość od obiektu musi być większa niż ogniskowa.',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const faq: DepthOfFieldLocaleContent['faq'] = [
|
|
33
|
+
{
|
|
34
|
+
question: 'Co to jest głębia ostrości?',
|
|
35
|
+
answer: 'Głębia ostrości (DoF) to zakres odległości w scenie, który na zdjęciu wydaje się akceptowalnie ostry. Zależy od przysłony, ogniskowej, odległości od obiektu i rozmiaru matrycy.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'Co to jest odległość hiperfokalna?',
|
|
39
|
+
answer: 'Odległość hiperfokalna to najmniejsza odległość ostrzenia, przy której obiekty w nieskończoności są nadal akceptowalnie ostre. Ustawienie ostrości na tę odległość maksymalizuje głębię ostrości.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
question: 'Dlaczego większa przysłona zmniejsza głębię ostrości?',
|
|
43
|
+
answer: 'Szerszy otwór przysłony zbiera światło z większego obszaru soczewki, co zwiększa krążek rozproszenia dla punktów poza płaszczyzną ostrości, zawężając strefę akceptowalnej ostrości.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
question: 'Jak rozmiar matrycy wpływa na głębię ostrości?',
|
|
47
|
+
answer: 'Większe matryce mają wyższy próg krążka rozproszenia. Jednak przy ekwiwalentnych kątach widzenia większe matryce dają mniejszą głębię, ponieważ wymagają dłuższych ogniskowych.',
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const howTo: DepthOfFieldLocaleContent['howTo'] = [
|
|
52
|
+
{
|
|
53
|
+
name: 'Wybierz matrycę aparatu',
|
|
54
|
+
text: 'Wybierz format matrycy odpowiadający Twojemu aparatowi. Ustala to wartość krążka rozproszenia (CoC) używaną do obliczeń.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Ustaw przysłonę i ogniskową',
|
|
58
|
+
text: 'Wybierz przysłonę w krokach co 1/3 stopnia. Suwak ogniskowej ma skalę logarytmiczną dla większej precyzji w szerokim kącie.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Ustaw odległość od obiektu',
|
|
62
|
+
text: 'Ustaw odległość między aparatem a głównym tematem. Przełączaj między metrami i stopami według potrzeb.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'Odczytaj wyniki',
|
|
66
|
+
text: 'Pasek ostrości wizualizuje strefę ostrości. Granice bliższa i dalsza pokazują dokładny zakres akceptowalnej ostrości.',
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const seo: DepthOfFieldLocaleContent['seo'] = [
|
|
71
|
+
{ type: 'title', text: 'Zrozumienie głębi ostrości w fotografii i filmie', level: 2 },
|
|
72
|
+
{ type: 'paragraph', html: 'Głębia ostrości to jedno z najpotężniejszych narzędzi kreatywnych. <strong>Mała głębia ostrości</strong> izoluje temat, podczas gdy <strong>duża głębia</strong> utrzymuje ostrość całego krajobrazu. Ten kalkulator daje Ci pełną kontrolę.' },
|
|
73
|
+
|
|
74
|
+
{ type: 'title', text: 'Trzy zmienne kontrolujące DoF', level: 3 },
|
|
75
|
+
{ type: 'table', headers: ['Zmienna', 'Wzrost →', 'Efekt na DoF'], rows: [
|
|
76
|
+
['Przysłona', 'f/1.4 → f/16', 'Większa przysłona = mniejsza głębia'],
|
|
77
|
+
['Ogniskowa', '24mm → 200mm', 'Dłuższa ogniskowa = mniejsza głębia przy tej samej odległości'],
|
|
78
|
+
['Odległość', '1m → 10m', 'Dalszy obiekt = większa głębia'],
|
|
79
|
+
]},
|
|
80
|
+
|
|
81
|
+
{ type: 'title', text: 'Odległość hiperfokalna: Maksymalna ostrość', level: 3 },
|
|
82
|
+
{ type: 'paragraph', html: 'Ustawiając ostrość na <strong>odległość hiperfokalną</strong>, wszystko od połowy tej odległości do nieskończoności będzie ostre. Kluczowe w fotografii krajobrazowej.' },
|
|
83
|
+
{ type: 'tip', title: 'Porada praktyczna', html: 'W fotografii ulicznej ustaw ostrość na hiperfokalną. Przy 35mm na APS-C i f/8 wynosi ona ok. <strong>4 metrów</strong>: wszystko od 2m do nieskończoności będzie ostre.' },
|
|
84
|
+
|
|
85
|
+
{ type: 'title', text: 'Rozmiar matrycy i krążek rozproszenia', level: 3 },
|
|
86
|
+
{ type: 'paragraph', html: '<strong>Krążek rozproszenia (CoC)</strong> definiuje akceptowalną ostrość. Matryca Full Frame ma CoC 0,030 mm; smartfon ok. 0,006 mm. Mniejszy CoC oznacza ostrzejsze kryteria.' },
|
|
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: 'Smartfon', value: '0,006 mm', icon: 'mdi:cellphone' },
|
|
91
|
+
]},
|
|
92
|
+
|
|
93
|
+
{ type: 'title', text: 'DoF w kinie: Ogniskowa vs Matryca', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: 'Filmowanie w formacie Super 35 często wykorzystuje dłuższe ogniskowe dla uzyskania "filmowego wyglądu". Jasny obiektyw 85mm to klasyk w portrecie.' },
|
|
95
|
+
{ type: 'diagnostic', variant: 'success', title: 'Zasada dystrybucji ostrości', icon: 'mdi:lightbulb-outline', badge: 'Technika Pro', html: 'Dla obiektu w odległości 3m przy 50mm i f/2.8: strefa ostrości za obiektem jest zawsze większa niż przed nim – około w <strong>stosunku 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: 'pl',
|
|
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-profundidade-de-campo';
|
|
6
|
+
const title = 'Calculadora de Profundidade de Campo: DoF em Tempo Real';
|
|
7
|
+
const description = 'Calcule a profundidade de campo, distância hiperfocal e limites de foco em tempo real. Compatível com todos os sensores com precisão de 1/3 de stop.';
|
|
8
|
+
|
|
9
|
+
const ui: DepthOfFieldUI = {
|
|
10
|
+
title: 'Profundidade de Campo',
|
|
11
|
+
paramsTitle: 'Parâmetros',
|
|
12
|
+
sensorLabel: 'Sensor da Câmara',
|
|
13
|
+
moreLabel: 'Mais sensores…',
|
|
14
|
+
apertureLabel: 'Abertura',
|
|
15
|
+
focalLabel: 'Distância Focal',
|
|
16
|
+
distanceLabel: 'Distância do Sujeito',
|
|
17
|
+
metersLabel: 'm',
|
|
18
|
+
feetLabel: 'ft',
|
|
19
|
+
resultsTitle: 'Resultados',
|
|
20
|
+
totalDofLabel: 'Profundidade de Campo Total',
|
|
21
|
+
infiniteLabel: 'Infinito',
|
|
22
|
+
nearLimitLabel: 'Limite Próximo',
|
|
23
|
+
farLimitLabel: 'Limite Distante',
|
|
24
|
+
hyperfocalLabel: 'Hiperfocal',
|
|
25
|
+
cocLabel: 'Círculo de Confusão',
|
|
26
|
+
cocUnit: 'mm',
|
|
27
|
+
showDetailsLabel: 'Mostrar detalhes técnicos',
|
|
28
|
+
hideDetailsLabel: 'Ocultar detalhes técnicos',
|
|
29
|
+
errorBelowFocal: 'A distância do sujeito deve ser superior à distância focal.',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const faq: DepthOfFieldLocaleContent['faq'] = [
|
|
33
|
+
{
|
|
34
|
+
question: 'O que é a profundidade de campo?',
|
|
35
|
+
answer: 'A profundidade de campo (DoF) é o intervalo de distância numa cena que aparece aceitavelmente nítido na imagem final. É determinada pela abertura, distância focal, distância do sujeito e tamanho do sensor.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'O que é a distância hiperfocal?',
|
|
39
|
+
answer: 'A distância hiperfocal é a distância de focagem mais próxima para a qual os objetos no infinito ainda estão aceitavelmente nítidos. Focar nesta distância maximiza a profundidade de campo.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
question: 'Porque é que uma abertura maior reduz a DoF?',
|
|
43
|
+
answer: 'Uma abertura mais ampla recolhe luz sobre uma área maior da lente, o que aumenta o tamanho do círculo de confusão para os pontos fora de foco, estreitando a zona de nitidez.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
question: 'Como é que o tamanho do sensor afeta a profundidade de campo?',
|
|
47
|
+
answer: 'Sensores maiores usam um limiar de círculo de confusão maior. No entanto, para campos de visão equivalentes, sensores maiores produzem DoF mais rasa porque exigem distâncias focais mais longas.',
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const howTo: DepthOfFieldLocaleContent['howTo'] = [
|
|
52
|
+
{
|
|
53
|
+
name: 'Selecione o sensor da sua câmara',
|
|
54
|
+
text: 'Escolha o formato de sensor que corresponde ao corpo da sua câmara. Isto define o valor do círculo de confusão (CoC) usado nos cálculos.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Defina a abertura e focal',
|
|
58
|
+
text: 'Escolha um f-stop em incrementos de 1/3. O seletor de distância focal usa uma escala logarítmica para maior precisão em grande angular.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Ajuste a distância do sujeito',
|
|
62
|
+
text: 'Defina a distância entre a câmara e o sujeito principal. Alterne entre metros e pés conforme necessário.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'Consulte os resultados',
|
|
66
|
+
text: 'A barra de focagem visualiza a zona nítida. Os limites próximo e distante mostram as fronteiras exatas da focagem aceitável.',
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const seo: DepthOfFieldLocaleContent['seo'] = [
|
|
71
|
+
{ type: 'title', text: 'Compreender a Profundidade de Campo em Fotografia e Cinema', level: 2 },
|
|
72
|
+
{ type: 'paragraph', html: 'A profundidade de campo é uma das ferramentas criativas mais poderosas. Uma <strong>profundidade de campo rasa</strong> isola os sujeitos, enquanto uma <strong>profundidade de campo ampla</strong> mantém toda a paisagem nítida. Esta calculadora dá-lhe o controlo total.' },
|
|
73
|
+
|
|
74
|
+
{ type: 'title', text: 'As Três Variáveis que Controlam a DoF', level: 3 },
|
|
75
|
+
{ type: 'table', headers: ['Variável', 'Aumento →', 'Efeito na DoF'], rows: [
|
|
76
|
+
['Abertura', 'f/1.4 → f/16', 'Abertura maior = DoF mais rasa'],
|
|
77
|
+
['Distância Focal', '24mm → 200mm', 'Focal mais longa = DoF mais rasa à mesma distância'],
|
|
78
|
+
['Distância Sujeito', '1m → 10m', 'Sujeito mais longe = DoF mais ampla'],
|
|
79
|
+
]},
|
|
80
|
+
|
|
81
|
+
{ type: 'title', text: 'A Distância Hiperfocal: Nitidez Máxima', level: 3 },
|
|
82
|
+
{ type: 'paragraph', html: 'Ao focar na <strong>distância hiperfocal</strong>, tudo desde metade dessa distância até ao infinito parecerá nítido. Ideal para fotografia de paisagem.' },
|
|
83
|
+
{ type: 'tip', title: 'Dica prática', html: 'Para fotografia de rua, defina o foco para a distância hiperfocal. Com uma lente de 35mm em APS-C a f/8, a hiperfocal é aprox. <strong>4 metros</strong>: tudo de 2m ao infinito ficará nítido.' },
|
|
84
|
+
|
|
85
|
+
{ type: 'title', text: 'Tamanho do Sensor e Círculo de Confusão', level: 3 },
|
|
86
|
+
{ type: 'paragraph', html: 'O <strong>círculo de confusão (CoC)</strong> define a nitidez aceitável. Um sensor Full Frame tem um CoC de 0,030 mm; um smartphone usa ~0,006 mm. CoC menores significam critérios de nitidez mais rigorosos.' },
|
|
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 no Cinema: Focal vs. Sensor', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: 'Filmar em Super 35 exige frequentemente focais mais longas para comprimir a perspetiva, criando o "look cinematográfico". Um 85mm luminoso é a escolha clássica para retrato.' },
|
|
95
|
+
{ type: 'diagnostic', variant: 'success', title: 'A Regra de Distribuição do Foco', icon: 'mdi:lightbulb-outline', badge: 'Técnica Pro', html: 'Para um sujeito a 3m com uma 50mm a f/2.8 : a zona nítida atrás do sujeito é sempre maior do que à frente – aprox. na <strong>proporção 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: 'pt',
|
|
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 = 'kalkulyator-glubiny-rezkosti';
|
|
6
|
+
const title = 'Калькулятор глубины резкости: DoF в реальном времени';
|
|
7
|
+
const description = 'Расчет глубины резкости, гиперфокального расстояния и границ фокуса. Поддержка всех размеров матриц с точностью до 1/3 стопа.';
|
|
8
|
+
|
|
9
|
+
const ui: DepthOfFieldUI = {
|
|
10
|
+
title: 'Глубина резкости',
|
|
11
|
+
paramsTitle: 'Параметры',
|
|
12
|
+
sensorLabel: 'Матрица камеры',
|
|
13
|
+
moreLabel: 'Больше матриц…',
|
|
14
|
+
apertureLabel: 'Диафрагма',
|
|
15
|
+
focalLabel: 'Фокусное расстояние',
|
|
16
|
+
distanceLabel: 'Расстояние до объекта',
|
|
17
|
+
metersLabel: 'м',
|
|
18
|
+
feetLabel: 'фт',
|
|
19
|
+
resultsTitle: 'Результаты',
|
|
20
|
+
totalDofLabel: 'Общая глубина резкости',
|
|
21
|
+
infiniteLabel: 'Бесконечность',
|
|
22
|
+
nearLimitLabel: 'Ближняя граница',
|
|
23
|
+
farLimitLabel: 'Дальняя граница',
|
|
24
|
+
hyperfocalLabel: 'Гиперфокал',
|
|
25
|
+
cocLabel: 'Кружок рассеяния',
|
|
26
|
+
cocUnit: 'мм',
|
|
27
|
+
showDetailsLabel: 'Показать тех. детали',
|
|
28
|
+
hideDetailsLabel: 'Скрыть тех. детали',
|
|
29
|
+
errorBelowFocal: 'Расстояние должно быть больше фокусного расстояния.',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const faq: DepthOfFieldLocaleContent['faq'] = [
|
|
33
|
+
{
|
|
34
|
+
question: 'Что такое глубина резкости?',
|
|
35
|
+
answer: 'Глубина резко изображаемого пространства (ГРИП) — это диапазон расстояний в сцене, которые выглядят резкими. Зависит от диафрагмы, фокусного расстояния, дистанции и матрицы.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'Что такое гиперфокальное расстояние?',
|
|
39
|
+
answer: 'Это минимальная дистанция фокусировки, при которой объекты на бесконечности остаются резкими. Фокусировка на это расстояние дает максимальную ГРИП.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
question: 'Почему открытая диафрагма уменьшает ГРИП?',
|
|
43
|
+
answer: 'Широкое отверстие собирает свет с большой площади линзы, что увеличивает кружок рассеяния для точек вне фокуса, сужая зону резкости.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
question: 'Как размер матрицы влияет на ГРИП?',
|
|
47
|
+
answer: 'Большие матрицы имеют больший порог кружка рассеяния. Однако при эквивалентных углах обзора они дают меньшую ГРИП, так как требуют больших фокусных расстояний.',
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const howTo: DepthOfFieldLocaleContent['howTo'] = [
|
|
52
|
+
{
|
|
53
|
+
name: 'Выберите матрицу вашей камеры',
|
|
54
|
+
text: 'Выберите формат матрицы вашей камеры. Это определит значение кружка рассеяния (CoC) для расчетов.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Установите диафрагму и фокус',
|
|
58
|
+
text: 'Выберите значение диафрагмы с шагом 1/3. Шкала фокусного расстояния логарифмическая для точности на широком угле.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Задайте дистанцию до объекта',
|
|
62
|
+
text: 'Укажите расстояние от камеры до объекта. Можно переключаться между метрами и футами.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'Изучите результаты',
|
|
66
|
+
text: 'Индикатор фокуса визуализирует резкую зону. Ближняя и дальняя границы показывают точный диапазон резкости.',
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const seo: DepthOfFieldLocaleContent['seo'] = [
|
|
71
|
+
{ type: 'title', text: 'Понимание глубины резкости в фотографии и кино', level: 2 },
|
|
72
|
+
{ type: 'paragraph', html: 'Глубина резкости — один из мощнейших творческих инструментов. <strong>Малая глубина резкости</strong> выделяет объект, а <strong>большая</strong> — делает резким весь пейзаж. Этот калькулятор дает вам полный контроль.' },
|
|
73
|
+
|
|
74
|
+
{ type: 'title', text: 'Три фактора управления ГРИП', level: 3 },
|
|
75
|
+
{ type: 'table', headers: ['Фактор', 'Увеличение →', 'Влияние на ГРИП'], rows: [
|
|
76
|
+
['Диафрагма', 'f/1.4 → f/16', 'Больше отверстие = меньше ГРИП'],
|
|
77
|
+
['Фокусное раст.', '24мм → 200мм', 'Больше фокус = меньше ГРИП (на той же дистанции)'],
|
|
78
|
+
['Дистанция', '1м → 10м', 'Дальше объект = больше ГРИП'],
|
|
79
|
+
]},
|
|
80
|
+
|
|
81
|
+
{ type: 'title', text: 'Гиперфокальное расстояние: максимум резкости', level: 3 },
|
|
82
|
+
{ type: 'paragraph', html: 'При фокусировке на <strong>гиперфокальное расстояние</strong> всё от половины этого расстояния до бесконечности будет резким. Идеально для пейзажей.' },
|
|
83
|
+
{ type: 'tip', title: 'Практический совет', html: 'Для стрит-фото установите фокус на гиперфокал. С 35мм на APS-C при f/8 это около <strong>4 метров</strong>: всё от 2м до бесконечности будет в фокусе.' },
|
|
84
|
+
|
|
85
|
+
{ type: 'title', text: 'Размер матрицы и кружок рассеяния', level: 3 },
|
|
86
|
+
{ type: 'paragraph', html: '<strong>Кружок рассеяния (CoC)</strong> определяет границу резкости. Для Full Frame это 0.030 мм, для смартфона — около 0.006 мм. Меньший CoC требует большей точности.', label: 'Примеры CoC' },
|
|
87
|
+
{ type: 'stats', columns: 3, items: [
|
|
88
|
+
{ label: 'Full Frame', value: '0.030 мм', icon: 'mdi:camera' },
|
|
89
|
+
{ label: 'APS-C', value: '0.019 мм', icon: 'mdi:camera-outline' },
|
|
90
|
+
{ label: 'Смартфон', value: '0.006 мм', icon: 'mdi:cellphone' },
|
|
91
|
+
]},
|
|
92
|
+
|
|
93
|
+
{ type: 'title', text: 'ГРИП в кино: Фокус vs Матрица', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: 'В кино на Super 35 часто используют длинный фокус для сжатия перспективы и создания "киношного вида". Светосильный 85мм — классика для портретов.' },
|
|
95
|
+
{ type: 'diagnostic', variant: 'success', title: 'Правило распределения фокуса', icon: 'mdi:lightbulb-outline', badge: 'Профи-прием', html: 'Для объекта на 3м с 50мм на f/2.8: зона резкости сзади всегда больше, чем спереди — примерно в <strong>пропорции 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: 'ru',
|
|
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 = 'skarpedjupskalkylator';
|
|
6
|
+
const title = 'Skärpedjupskalkylator: DoF i realtid för alla kameror';
|
|
7
|
+
const description = 'Beräkna skärpedjup, hyperfokalavstånd och fokusgränser i realtid. Stöder alla sensorstorlekar med 1/3 stegs bländarprecision.';
|
|
8
|
+
|
|
9
|
+
const ui: DepthOfFieldUI = {
|
|
10
|
+
title: 'Skärpedjupskalkylator',
|
|
11
|
+
paramsTitle: 'Parametrar',
|
|
12
|
+
sensorLabel: 'Kamerasensor',
|
|
13
|
+
moreLabel: 'Fler sensorer…',
|
|
14
|
+
apertureLabel: 'Bländare',
|
|
15
|
+
focalLabel: 'Brännvidd',
|
|
16
|
+
distanceLabel: 'Motivavstånd',
|
|
17
|
+
metersLabel: 'm',
|
|
18
|
+
feetLabel: 'ft',
|
|
19
|
+
resultsTitle: 'Resultat',
|
|
20
|
+
totalDofLabel: 'Totalt skärpedjup',
|
|
21
|
+
infiniteLabel: 'Oändligt',
|
|
22
|
+
nearLimitLabel: 'Närgräns',
|
|
23
|
+
farLimitLabel: 'Fjärrgräns',
|
|
24
|
+
hyperfocalLabel: 'Hyperfokal',
|
|
25
|
+
cocLabel: 'Oskärpecirkel',
|
|
26
|
+
cocUnit: 'mm',
|
|
27
|
+
showDetailsLabel: 'Visa tekniska detaljer',
|
|
28
|
+
hideDetailsLabel: 'Dölj tekniska detaljer',
|
|
29
|
+
errorBelowFocal: 'Motivavståndet måste vara större än brännvidden.',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const faq: DepthOfFieldLocaleContent['faq'] = [
|
|
33
|
+
{
|
|
34
|
+
question: 'Vad är skärpedjup?',
|
|
35
|
+
answer: 'Skärpedjup (DoF) är det avståndsområde i en scen som upplevs som acceptabelt skarpt i den slutliga bilden. Det bestäms av bländare, brännvidd, motivavstånd och sensorstorlek.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'Vad är hyperfokalavstånd?',
|
|
39
|
+
answer: 'Hyperfokalavstånd är det närmaste fokuseringsavstånd där objekt vid oändligheten fortfarande är skarpa. Fokusering på detta avstånd maximerar skärpedjupet.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
question: 'Varför minskar en större bländaröppning skärpedjupet?',
|
|
43
|
+
answer: 'En större bländaröppning samlar ljus över en större yta av linsen, vilket ökar oskärpecirkeln för punkter utanför fokus. Detta smalnar av zonen för acceptabel skärpa.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
question: 'Hur påverkar sensorstorleken skärpedjupet?',
|
|
47
|
+
answer: 'Större sensorer har en högre tröskel för oskärpecirkeln. Vid ekvivalenta bildvinklar ger dock större sensorer oftast ett kortare skärpedjup eftersom de kräver längre brännvidd.',
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const howTo: DepthOfFieldLocaleContent['howTo'] = [
|
|
52
|
+
{
|
|
53
|
+
name: 'Välj din kamerasensor',
|
|
54
|
+
text: 'Välj det sensorformat som matchar ditt kamerahus. Detta ställer in värdet för oskärpecirkeln (CoC) för beräkningarna.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Ställ in bländare och brännvidd',
|
|
58
|
+
text: 'Välj bländare i steg om 1/3. Brännviddsreglaget är logaritmiskt för bättre precision vid vidvinkelinställningar.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Ställ in motivavstånd',
|
|
62
|
+
text: 'Ange avståndet mellan kameran och ditt huvudmotiv. Växla mellan meter och fot efter behov.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'Läs av resultaten',
|
|
66
|
+
text: 'Fokusstapeln visualiserar den skarpa zonen. När- och fjärrgränserna visar de exakta gränserna för acceptabel skärpa.',
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const seo: DepthOfFieldLocaleContent['seo'] = [
|
|
71
|
+
{ type: 'title', text: 'Förstå skärpedjup inom fotografi och film', level: 2 },
|
|
72
|
+
{ type: 'paragraph', html: 'Skärpedjup är ett av de mest kraftfulla kreativa verktygen. Ett <strong>kort skärpedjup</strong> isolerar motivet, medan ett <strong>långt skärpedjup</strong> håller hela landskapet skarpt. Denna kalkylator ger dig full kontroll.' },
|
|
73
|
+
|
|
74
|
+
{ type: 'title', text: 'De tre variablerna för skärpedjup', level: 3 },
|
|
75
|
+
{ type: 'table', headers: ['Variabel', 'Ökning →', 'Effekt på DoF'], rows: [
|
|
76
|
+
['Bländare', 'f/1.4 → f/16', 'Större bländare = kortare skärpedjup'],
|
|
77
|
+
['Brännvidd', '24mm → 200mm', 'Längre brännvidd = kortare skärpedjup vid samma avstånd'],
|
|
78
|
+
['Avstånd', '1m → 10m', 'Längre avstånd = längre skärpedjup'],
|
|
79
|
+
]},
|
|
80
|
+
|
|
81
|
+
{ type: 'title', text: 'Hyperfokalavstånd: Maximal skärpa', level: 3 },
|
|
82
|
+
{ type: 'paragraph', html: 'När du fokuserar på <strong>hyperfokalavståndet</strong> blir allt från halva avståndet till oändligheten skarpt. Idealiskt för landskapsfotografering.' },
|
|
83
|
+
{ type: 'tip', title: 'Praktiskt tips', html: 'För gatufotografering, ställ in fokus på hyperfokalavståndet. Med ett 35mm-objektiv på APS-C vid f/8 är det ca <strong>4 meter</strong>: allt från 2m till oändligheten blir skarpt.' },
|
|
84
|
+
|
|
85
|
+
{ type: 'title', text: 'Sensorstorlek och oskärpecirkel', level: 3 },
|
|
86
|
+
{ type: 'paragraph', html: '<strong>Oskärpecirkeln (CoC)</strong> definierar acceptabel skärpa. En fullformatssensor har en CoC på 0,030 mm; en smartphone ca 0,006 mm. Mindre CoC innebär strängare skärpekrav.' },
|
|
87
|
+
{ type: 'stats', columns: 3, items: [
|
|
88
|
+
{ label: 'Fullformat', 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 i film: Brännvidd vs Sensor', level: 3 },
|
|
94
|
+
{ type: 'paragraph', html: 'Filmning i Super 35 använder ofta längre brännvidd för att komprimera perspektivet och skapa en "filmisk look". Ett ljusstarkt 85mm-objektiv är klassiskt för porträtt.' },
|
|
95
|
+
{ type: 'diagnostic', variant: 'success', title: 'Regeln för fokusfördelning', icon: 'mdi:lightbulb-outline', badge: 'Pro-teknik', html: 'För ett motiv på 3m med 50mm vid f/2.8: det skarpa området bakom motivet är alltid större än framför – ungefär i <strong>förhållandet 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: 'sv',
|
|
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
|
+
};
|