背景故事
接下来的内容详细介绍了手动闪光灯的模拟摄影的复杂性。如果您对您不感兴趣,只需阅读tl; DR; dr to to the the下一个标题:“ Pyflashcards:轻巧的,有点有点的工具,用于在闪存卡甲板上创建和测试自己。'
TL;DR: I recently took up analogue photography again
after a decade away. If I want to take photographs
in low light conditions, this means I have to get to
grips for the first time with manual flash. To do
that, I need to internalize the exponential relation-
ships between multiple physical variables. To do that,
I need – flash cards. Thus was born my first
Codecademy CS101 portfolio project.
今年1月,经过几个月的交谈,我迈出了第一步,回到模拟摄影中 - 实际上,任何摄影都不使用智能手机相机。我从那个世界的射击出现在11年前,那时,在几周的时间里,我值得信赖的尼康D40 DSLR和我心爱的Olympus Olympus OM-4电影SLR,我父亲的手工艺是我父亲的一部,在不同的日子,以一种基本的方式或另一种方式停止运作。我即将在大学结束时;无论如何,我都有太多的爱好和兴趣,当我试图进入劳动力时,他们的时间甚至更少。毫无疑问,如果我停止购买烟草或在晚上购买少量饮料的那几年,我本来可以替换我的相机,但似乎以某种方式,甚至很方便 - 甚至是毫无意义的,只是为了让一个兴趣让一个兴趣去。
什么变化了?在随后的十年中,几乎所有除了我的工作之外,几乎所有的梦想工作都与您的关键艺术追求之一重叠,这些追求是一种不可预见的,但事后可预测的后果,它变得越来越少,它变得越来越少。过去的一年。简而言之,我意识到,我再次需要一种爱好,实际上 是一种爱好。回到我父母的圣诞节过圣诞节期间,我挖出了我旧的破碎数码单反相机,发现我十几岁的时候就节省了亮点 - Nikkor 50mm F/1.8 AF-D,这是一个漂亮的预算选项。竞争对手镜头的锋利价格十倍仍然处于完美的工作状态。我回到首都;我和朋友一起去了雅典旅行,我在很大程度上花了很多时间来看他们的各种数码单反相机,莱卡斯和老式的测距仪。然后,回到家中,我把自己扔进了eBay。几周后,我有一个非常英俊的1984年尼康F3来打电话给我。再过三个月,我还投资了1956年的Leica IIIF。在想象的王国十年后,我绝对被送回了小工具,小玩意和事物的领域。
在这里,我们开始接触我选择的投资组合项目的编程介绍的投资组合项目。我对捕捉人和地方的摄影感兴趣,确实是 的地方,要么设法封装了一个关于一个人的本质的东西,要么冻结了一个迷人,迷人的,短暂的时刻是非常社会的。他们涉及将自己与他人靠近,而不会使他们轻松自在。而且,从他们的角度考虑一下,没有什么比等待某人在最终拍照之前紧张地摆弄相机设置的更糟糕的了。如果要完成,必须快速完成。测量光度,选择快门速度和光圈,构建图片,将您的对象焦点置于焦点 - 所有这些几乎必须立即发生,或者必须提前完成。两到三秒钟的镜头点开始变得明显。超过五秒钟,您会变得不安。
关于拍摄电影的另一件事是,大多数可用的电影库存都是为日光设计的。在室内或边缘进入暮光之城,您开始需要那种需要三脚架的较长曝光时间。我想要自发性,所以这对我不起作用。替代方案?使用闪光灯。
当引入尼康F3时,自动,透镜(TTL)闪光灯计量,使您的相机能够为您计算出闪光灯的光亮并自动控制它的那种即将进入。 F3将TTL与一些非常特定的套件结合使用,但是为了简单起见,让我们只是说它们不是一种选择。与此同时,当Leica IIIF被引入大约三十年前时,相机甚至能够将闪光灯同步到其快门的开口仍然是革命性的。因此,这里不会有自动控制。
如果我想在昏暗的光线下拍照,我需要使用闪光灯;而且,如果我想使用闪光灯,我需要手动控制它。为此,我需要参与精神数学的位置。
每个闪光灯都有一个指导号码或GN,通常以米为单位。例如,GN为32的GN意味着,使用全功率闪光灯以及相机镜头在f/1处的光圈,相机32m的受试者将被正确暴露。在f/2处,正确暴露受试者的距离为16m;在f/4,8m,依此类推。 gn =孔径 *距离;距离= GN / Aperture编号;孔径= gn /距离。< / p>
但是,孔的宽度还决定了景深,或者您的照片的焦点是多少,以及随着它们的靠近或走得更远而变得模糊。这是一个重要的创造因素,您不一定希望您的主题站立多远(反之亦然)为您决定。因此,像我的Nissin I40这样的闪光还允许手动摄影师设置产生的光线的功率水平或强度,在这种情况下,从1/1下降到1/256。但是,为了使事情进一步复杂化,这种功率水平基于将光的强度扔到二维平面上。与受试者的距离是线性的,即一维。因此,对于每一半的光强度,距离仅由2个平方根分配。将功率置于距离的一半,达到GN 16m。所有这些距离也特别是 以100 ISO ISO的膜灵敏度等级应用于另一个平面测量。如果您以200次ISO拍摄,即敏感性的两倍,那么您的全功率GN将乘以2次,从32到46。如果您像我平时一样拍摄400 ISO胶片双打达到64。在800 ISO时,大约是91。
现在,一旦您将其置于此系统内,它就会有一种直观的优雅。每次灯光加倍或减半时,我们都说我们已经上下了一站。将曝光时间从1/1000到1/500增加一倍,可以增加曝光度。将闪光功率从1/16提高到1/8,将曝光量增加一站。将光圈从f/5.6缩小到f/8会减少一个停靠点。 (孔径数测量孔径的直径是镜头焦距的一部分,另一种线性测量,因此它们同样遵守2规则。 8m远,或从2m到14m,您需要将曝光量减少一站。实际上,所有这些更改都涉及将表盘或戒指恰好单击从一个设置到另一个设置,并知道您是否应该将其调高或降低。首先,您需要做的就是通过记住Flash的GN来将自己定向在这种相互关系系统中,将其乘以2的正确指数,以适应您的电影的ISO敏感性,然后乘坐一对距离以及孔径,孔径和GN或距离和GN,计算三向相互依赖性的第三个变量(与获得所需的GN需要闪存功率级别)。至关重要的是,您需要在那一刻过去之前迅速这样做,而您需要同时保持开朗,自信和放松以使您的受试者轻松自在。
意大利语 bella figura 有多难?当涉及到速度,自然性以及对两者至关重要的身体,思想和仪器的一项成为一种的实现时,我总是采用相同的方法:在幕后努力工作。简而言之,完全不自然。实践使至少变得更好。
我们处于钻头领域。而且,由于要用手动闪光灯拍照,所以我首先需要将所有这些数学关系内部化,并且实际上,也可能会直接记住某些事物,例如某些功率水平的GN,或者有多少个停靠站。 16是从f/2.8(答案是五)。
摄影争论。开始一个新项目。 p>
PYFLASHCARD:轻巧的,有点易于创建和测试在闪存卡甲板上的工具
我选择的项目是基于终端的Python闪存卡甲板。与现实生活中的闪存卡一样,这不会涉及与自然语言处理的任何内容。您显示的一侧A,可以在需要时翻转以查看下一侧。无论您是正确的还是错误的,您的表现都是自我报告的。如果它使您感觉好些,您可以撒谎,但是它会使您在每回合结束时获得的分数,然后在甲板结束时再次获得分数,不太准确,因此不太有用。
使用此程序也需要有一些好处,而只是购买一堆纸牌并在上面写作。在这里,主要收益可以来自数据的更大多功能性。以400 ISO的闪光功率级别,GN,距离和结果孔径的表为例:
:闪存卡有两个方面。他们测试用户是否能够识别和复制两个信息之间或对应之间的关联:“摄影的mart虫圣徒”和“ Oscar Barnack”,例如,或“在这个项目上度过的周”和“更多的”比预期的。现在,有很多方法可以将该表分解为成对的相关值,这是您可能想在其上测试自己的许多方法。要手工做,您必须手工绘制多个甲板。这将涉及很多重复的劳动,并且非常耗时。但是,如果您将甲板以文件格式作为简单易于处理的CSV存储,那么您可以很容易地拿起该桌子,并且使用非常简单的附加代码,将其消化成多个不同的不同代码CSV甲板,覆盖所有不同可能的组合,按下按钮。
因此,我们的程序需要从CSV文件加载卡甲板。为了使该过程对用户友好,它应该具有一个加载菜单,列出可用的CSV,并让用户选择一个。如果尚不存在,或者即使用户只是不想创建自己的CSV,它也应提供自己的按用户输入手动创建新的闪存卡甲板的程序内工具。如果让用户创建甲板,它也必须能够保存它们,这又意味着在用户给出已经获取的文件名的情况下,它应该确保它不会覆盖现有文件。而且,当然,它必须让用户在当前加载的甲板上进行自我测试。
该程序的核心体系结构由一组循环组成,所有循环都可以嵌套在另一个AD Infinitum中,并且在用户完成后仍会以最短的路线退出。它们是甲板创建环,甲板加载循环,测试环和我们遇到的第一个曲线,主菜单循环。这三个都采用了Carddeck类,该课程存储一个甲板标题,2D列表的卡片和一个跟踪甲板尺寸的整数。该课程具有添加和删除卡的方法。核心循环还通过一个辅助循环来协助,该辅助循环处理可能值有限的用户输入,并且助手函数cresency_quit(),该功能; load_deck(),将CSV文件的内容加载到CardDeck对象中; title_box(),它散发出提供的字符串并在其周围绘制ASCII边框;和file_name_handler(),它检查是否已经使用了文件名,如果是的,则将包围的号码添加到末端(指定的最大文件名中),以帮助我们避免意外覆盖。
# Cleans up a file name ready for writing, and avoids
# overwriting existing files
def file_name_handler(name, extension, max_len):
# Strip the filename of illegal characters
name = re.sub(r"\W+", "", name)
# If the filename is already taken, add a number to the end
i = 0
while isfile(name + "." + extension):
i += 1
affix_str = f"({i})"
# Calculate characters remaining after addition of affix
new_max_len = max_len – len(affix_str)
if i > 1:
# An affix already exists, so take its length
affix_len = len(name.split("(")[1]) + 1
# Use it to strip out the old affix
end_indx = len(name) – affix_len
name = name[:end_indx]
# Make sure there's space for the new affix, then add it
if len(name) > new_max_len:
name = name[:new_max_len]
name += affix_str
# Finally, add the filetype extension and return the result
return name + "." + extension
运行Pyflashcard时,打印了一条欢迎消息,然后称为主菜单循环。它检查了脚本目录中是否已经存在任何CSV。如果他们不这样做,它会提示用户制作并调用甲板创建循环。如果确实存在,则可以让用户在负载或制造之间进行选择。 (他们也可以在这一点上退出或退出。)加载调用甲板加载循环以获取文件号,然后将其提供给load_deck()。毫不奇怪,使甲板创建循环。
甲板创建循环首先提供一些解释性的文本,然后逐卡继续进行卡片,要求用户输入第一侧A,然后进行一侧B。在每对可以继续输入下一张卡的值之后,或告诉Pyflashcards他们已经完成了,这时它将要求他们给甲板一个冠军。然后,它打印出完整的甲板,并要求用户提供保存或取消的文件名;如果用户希望取消,则可以选择重新开始或返回主菜单。
传递了甲板加载循环的文件列表,该文件列表最近由主菜单循环检查文件的检查生成,并将其打印为10个文件的编号表。每个页面都声明它是“将文件#显示为#of#”。用户可以输入其所需文件的数量以加载它,或者按[Enter]加载下一页。同样,他们也可以取消。
最后,测试循环的工作原理如您所期望的。用户选择每回合要显示多少张卡片。对于每张卡,首先显示A侧A。然后,用户可以将卡“翻转”以显示侧面B,然后必须自我报告是否正确。在每回合结束时,他们的得分到目前为止,可以选择继续前进,或者在下一轮中停留。每张卡都是从甲板上随机选择的,只有在创建加载卡戴克对象的一次性deepcopy并使用其remove_card()方法来从列表中逐一弹出项目作为测试收益,才能显示出一旦显示出来。当达到甲板的末端时,显示最终分数,用户可以重新启动甲板或返回主菜单。
我可能选择了一个比我真正预期的要复杂的项目。但是,它已经非常方便了,即使在开发过程中,我一直在使用它,这几乎是因为实施了加载和测试功能。它做了要做的事情,我对此我感到满意。如果我要返回进一步开发它,我的第一个任务是用更多的终端式GUI,âla nano或vim替换滚动终端接口填充终端窗口的完整“屏幕”。
可以查看github存储库here。
顺便说一句,
编程是我最近回到的青少年激情和兴趣。在10至18岁之间,我首先自学了HTML,XML和CSS,然后是ActionScript,JavaScript和SQL,然后是C,C ++和Python。然后我走了。回来很有趣。