普通视图

发现新文章,点击刷新页面。
昨天以前有呀

最近入手的几台心头好

2024年12月21日 17:50

写在前面

自从上次青岛之旅使用了胶片相机,被老婆点名表扬之后,就一发不可收拾的进入了胶片这个文艺复兴的大坑。拍摄胶片带给我的直观感受就是:

你无需理会参数,也不用去想后期。只管上卷按快门,剩下的交给胶片。

这真的是一种非常神奇的拍摄体验。在数码化泛滥的今天,人们似乎又开始怀念那种带有温暖感觉的所谓胶片感。也开始从拍摄胶片中去寻找一种久违的轻松愉悦的拍摄体验。

下面就说说最近新入手的几台胶片相机。

奥林巴斯 PEN-EED

PEN-EED

个人感觉是奥林巴斯整个PEN系列中,颜值最高的一台。这也是主要的入手理由。当然除了长得好看之外,个人最看重的就是:它是一台半格胶片机。

所谓半格胶片机,就是可以将一张胶片一分为二,一卷36张的胶片,可以拍摄72张。

在胶卷价格涨到飞起的当下,半格相机无疑是一个非常好的选择,省钱嘛,一卷就可以拍好久。但是这台PEN-EED有一个对于初学者不太友好的问题,就是它是一台估焦的相机。对于新手而言,它没有所谓对焦系统,因为配备了一颗32mm f1.7的定焦镜头,所以对焦这件事,只能交给拍摄者对于自己和被拍摄者之间距离的把控,简单来说,就是交给感觉。

而且这台相机的快门速度只有1/15秒,算是一台标准的阳光机。好在它足够好看,也足够轻便,就算不用来拍摄,作为一个拍摄中的道具,也可以算是物尽其用了。

奥林巴斯 PEN-F

PEN-F

在奥林巴斯的整个PEN系列中,PEN-F算是最最最经典的一台。由于它拥有完整的机械单反相机结构,又使用了半格的拍摄规格,所以它也因此有了半格之王的称号。个人感觉这台相机标志着奥林巴斯这个品牌,最杰出的制造工艺和水准了。

全金属的机身,哪怕是过去50多年,握在手里依然感觉非常精致。这台相机最了不起的一点就是,在那个年代奥林巴斯就已经将完整的单反结构塞进了这么小小的一个机器中,所以这台也算是整个相机史上一个里程碑一样的存在了。

尼康 F2

F2

尼康对于我来说,一直是白月光一样的存在。从最初的D90,到后来的D7200,再到后面的Z62,Zf。我的每一台尼康,都是我在当时最喜欢带出门的相机。只有用过别的品牌的相机,才知道尼康有多好。

许多人认为,尼康 Nikon F2 就是有史以来最好的纯机械相机,虽然可能它的技术并不是最先进的,但就综合工艺、质量、可靠性、耐用性上来说,他就是最好的。F2的机械相机王者地位难以动摇。相信没有一个男孩子可以抵抗这种纯机械的快乐。

入手它还有一个最吸引我的点,就是尼康为它搭配了非常丰富的配件世界。其中就有我非常心水的DW-1腰平取景器。

没有拍过腰平的人,永远感受不到世界真真切切在你眼前定格的浪漫。

腰平的快乐,我相信每一个拍摄胶片的人都体会过。虽然它的这腰平颗取景器没有其他中画幅、大画幅相机那么大,但是那么大的纯光学取景器,还是带给我深深的震撼,以及完全不同的拍摄体验。

最后

胶片值得,虽然它又麻烦、又烧钱,但是拍摄胶片给了我完全不同的拍摄体验。不单单是迷人的色彩和机械的结构。我会用更多时间来思考我真正想记录的画面的真实模样。正如有人说:

审美实际上是对过程的审视。

当你每一次上卷、每一次过片,每一次按下快门,每一次经历漫长过程后拿到成片。每一次拍摄胶片的过程,都是一趟有趣的旅程。

所以,去拍胶片把。

组了一台 QNAS Mini

2024年12月12日 10:54

写在前面

手里的极空间已经稳定的运行了非常久了,但是随着功能的丰富,越来越多的Docker容器,性能慢慢跟不上了。所以就想着自己组一个小的全闪的NAS,自己组的好处在于,一个是性能可以得到保障,再一个就是降低一些预算,毕竟成品的NAS价格居高不下,就算是主打性价比的产品,比自己组装还是要贵了不少。

硬件

得益于汪汪队射手大佬开源的 QNAS MINI 方案。完美的满足了我的全部需求:

  • 足够精致好看的设计;
  • 足够多的解决方案;
  • 八盘位的扩展性;
  • 小巧静音;

QNAS MINI

外壳是3D打印的,可以根据自己的审美,选择自己喜欢的配色方案,如果自己没有3D打印机,闲鱼上也有提供代打的服务,材质可以选择 PETG 或者 ABS 。这里更建议选择耐高温的 ABS 材质。

芯片部分,选择了 畅网 P5 的解决方案,也就是 N100 这颗处理器。当然针对这台机箱也有一些其他的方案,比如说:4105、5105等,可以根据自己的预算进行选择。

值得一提的是,不同的CPU需要对机箱的尺寸进行相应的调整,QNAS MINI 的原型机是针对畅网P2 ,也就是4105这颗CPU设计发布的,而 畅网 P5 发布后,为了满足 N100 的散热需求,网友在原型机的基础上,增加了高度,已达到增加风扇,加强散热的效果。

以下就是完整的的配件清单:

名称 价格
QNAS MINI 机箱 120
QNAS MINI 机箱背板 195
畅网 P5 N100主板 675
DDR5 16G 内存条 300
NVME 转 6 SATA 扩展卡 65
1TB 2.5寸固态硬盘 598
机箱风扇 x 2 30

软件

玩NAS的朋友都知道,一台NAS好不好用,其关键就在于软件部分。群晖的溢价那么高,还有那么多人买,其核心就是群晖的系统足够好用。除此之外,近年来,很多国产NAS的系统也取得了令人满意的成绩,比如:极空间、绿联等厂商。

但这些NAS系统都有一个弊端,那就是闭源。只有购买该厂商的硬件才能够使用,那有没有既好用,又开源的NAS操作系统呢。飞牛私有云给了我们一个答案。

fnos

飞牛私有云是一群NAS骨灰级玩家团队倾心打造的NAS操作系统。除了上手简单,影视刮削、照片备份、多端应用等常用功能的完成度都非常高。而且团队目前还提供了免费的内网穿透服务,这对于没有公网IP的同学来说,真的太友好。

除此之外,飞牛私有云提供的Docker服务,是我在所有NAS操作系统中体验最好的。

整个界面非常直观,不单单是提供了 Docker 容器的管理,还提供了 Docker Compose 的管理界面。而且镜像仓库不需要任何设置就可以正常的拉取镜像,且速度极快。相信玩 Docker 的朋友都知道这里面水有多深。

截止到今天,整个飞牛私有云的功能还在不断地完善,上个版本才更新了文件外链分享等功能。而这才是一个上线不到半年的产品。相信随着时间,飞牛私有云会给所有玩家更加好的NAS体验。

最后

都说中年男人有三宝,路由器、私有云(NAS)、充电宝。这虽然是网络上的一个梗,但NAS作为家庭数据存储以及家庭媒体中心,目前看,还是有着不可或缺的因素。如果你正好也想要自己组装一台NAS,希望这个方案能够帮助到你。

部署轻量友链朋友圈

2024年12月11日 20:17

前言

这两天突然发现,之前使用极简模式部署好的友链朋友圈没法获取到数据了。看了Github仓库才知道原项目已经停止支持了,取而代之的就是这个轻量友链朋友圈。

不知道是不是因为这个项目是为了 hexo 打造的原因,项目看了很久,愣是没看明白。直到把详细文档研究了一通,才大概明白了运行的原理。

其实严格来讲,该项目主要分为三个步骤:

  • 获取朋友圈JSON
  • 配置 Github Action
  • 拿到朋友圈文章列表JSON

获取朋友圈JSON

顾名思义,该步骤通过以下代码,将指定页面上的友链信息,直接转换成为一个 friend.json

原代码如下:

const YML = require('yamljs')
const fs = require('fs')

let friends = [],
    data_f = YML.parse(fs.readFileSync('source/_data/link.yml').toString().replace(/(?<=rss:)\s*\n/g, ' ""\n'));

data_f.forEach((entry, index) => {
    let lastIndex = 2;
    if (index < lastIndex) {
        const filteredLinkList = entry.link_list.filter(linkItem => !blacklist.includes(linkItem.name));
        friends = friends.concat(filteredLinkList);
    }
});

// 根据规定的格式构建 JSON 数据
const friendData = {
    friends: friends.map(item => {
        return [item.name, item.link, item.avatar];
    })
};

// 将 JSON 对象转换为字符串
const friendJSON = JSON.stringify(friendData, null, 2);

// 写入 friend.json 文件
fs.writeFileSync('./source/friend.json', friendJSON);

console.log('friend.json 文件已生成。');

比较遗憾的是,该代码仅适用于 HEXO 博客程序,如果想要用在HUGO中,需要做如下修改:

const cheerio = require('cheerio');
const fs = require('fs');
const path = require('path');

// 获取项目根目录的路径
const projectRoot = process.cwd();

// 读取 HTML 文件内容
const htmlFilePath = path.join(projectRoot, 'public', 'links', 'index.html');
const htmlContent = fs.readFileSync(htmlFilePath).toString();

// 使用 cheerio 解析 HTML
const $ = cheerio.load(htmlContent);

// 创建一个空的 friends 数组
let friends = [];

// 假设在 HTML 中每个好友信息存储在 <div class="friend-item"> 中,
// 并且每个条目包含 <a class="username">、<img class="avatar"> 和 <a class="link">
$('.friend-item').each((index, element) => {
    const username = $(element).find('.username').text().trim();  // 提取用户名
    const link = $(element).find('.link').attr('href');  // 提取链接
    const avatar = $(element).find('.avatar').attr('src');  // 提取头像

    // 如果都存在,添加到 friends 数组
    if (username && link && avatar) {
        friends.push({
            name: username,
            link: link,
            avatar: avatar
        });
    }
});

// 根据规定的格式构建 JSON 数据
const friendData = {
    friends: friends.map(item => {
        return [item.name, item.link, item.avatar];
    })
};

// 将 JSON 对象转换为字符串
const friendJSON = JSON.stringify(friendData, null, 2);

// 写入 friend.json 文件到根目录
fs.writeFileSync(path.join(__dirname, 'friend.json'), friendJSON);

console.log('friend.json 文件已生成。');

将该代码文件保存在根目录Link.js文件中。运行:

node link.js

就可以得到 friend.json 文件。

需要注意的是,这里需要用到 cheerio 解析 HTML。所以在运行前,需要:

npm install cheerio

以下就是JSON格式文件示例:

{
  "friends": [
    [
	    "林木木",
	    "https://immmmm.com",
	    "https://cravatar.cn/avatar/ba83fa02fc4b2ba621514941307e21be.jpeg?s=400"
    ],
    [
    
        "山卜方",
        "https://novcu.com",
        "https://cravatar.cn/avatar/6ebab96f3131621c51c08370d3c996f0.jpeg?s=400"
    ],
    [
		"大大的小蜗牛",
        "https://eallion.com",
        "https://cravatar.cn/avatar/171e4c30959e8c077a6c58b958624b31.jpeg?s=400"
    ]

} 

配置 Github Action

在 fork 了仓库:Friend-Circle-Lite 之后,只需要修改仓库中的 config.yaml 文件

spider_settings:
  enable: true
  json_url: "https://<你的地址>/friend.json"
  article_count: 5
  merge_result:
    enable: true
    merge_json_url: "<你的地址>"

如果需要邮件推送功能的,跟随官方文档完成相应配置即可。

拿到朋友圈文章列表JSON

在完成所有配置后,就可以手动或者自动的运行 Github Action ,该Action就会根据我们提供的 friend.json 拿到友链中所有朋友更新的文章啦。最后会在page分支中,生成一个 all.json ,通过调用这个文件,就可以做前端渲染了。

大功告成。

给Memos页面增加编辑、归档及删除功能

2023年7月19日 14:44

更新

  • 2023-07-19 新增删除功能;

前言

书接上回,继续完善Memos页面。这次给页面增加编辑归档功能,让我们的Memos页面使用起来更加的方便。

说明

值得一提的是,两个功能都需要Memos发布框的支持。还没有折腾的同学看这里: Memos页面添加发布框

编辑

  • 首先,给你的每一条Memos 增加一个按钮,并绑定一个点击事件:
<button class="edit-btn" onclick="editMemo('+JSON.stringify(data[i]).replace(/"/g, '&quot;')+')">编辑</button>
  • 添加点击事件
function editMemo(e) {
  var memoContent = e.content,memoId = e.id,memoRelationList = e.relationList,memoResourceList = e.resourceList,memoVisibility = e.visibility;
  getEditor = window.localStorage && window.localStorage.getItem("memos-editor-display"),
  memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token");
  if(memosOpenId && getEditor == "show"){
    memosTextarea.value = memoContent;
    memosTextarea.style.height = memosTextarea.scrollHeight + 'px';
    submitMemoBtn.classList.add("d-none");
    editMemoDom.classList.remove("d-none");
    document.body.scrollIntoView({behavior: 'smooth'});
  }
  editMemoBtn.addEventListener("click", function () {
    memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"),
    memoContent = memosTextarea.value,
    memoResourceList = window.localStorage && JSON.parse(window.localStorage.getItem("memos-resource-list")) ? window.localStorage && JSON.parse(window.localStorage.getItem("memos-resource-list")) : e.resourceList,
    memoVisibility = memosVisibilitySelect.value;
    let TAG_REG = /(?<=#)([^#\s!.,;:?"'()]+)(?= )/g;
    let memosTag = memoContent.match(TAG_REG);
    let hasContent = memoContent.length !== 0;
    if (hasContent) {
      var memoUrl = memosPath+"/api/v1/memo/"+memoId+"?openId="+memosOpenId;
      var memoBody = {content:memoContent,id:memoId,relationList:memoRelationList,resourceList:memoResourceList,visibility:memoVisibility}
      fetch(memoUrl, {
        method: 'PATCH',
        body: JSON.stringify(memoBody),
        headers: {
          'Content-Type': 'application/json'
        }
      }).then(function(res) {
        if (res.status == 200) {
          if (memosTag !== null) {
            const memoTagUrl = memosPath + "/api/v1/tag?openId=" + memosOpenId;
            (async () => {
              for await (const i of memosTag) {
                const response = await fetch(memoTagUrl, {
                  method: 'POST',
                  headers: {
                    'Content-Type': 'application/json'
                  },
                  body: JSON.stringify({
                    name: i
                  })
                });
              }
            })();
          }
          cocoMessage.success(
          '保存成功',
          ()=>{
            submitMemoBtn.classList.remove("d-none");
            editMemoDom.classList.add("d-none");
            location.reload();
          })
        }
      })
    }
  })
}

cancelEditBtn.addEventListener("click", function () {
  if (!editMemoDom.classList.contains("d-none")) {
    memosTextarea.value = '';
    memosTextarea.style.height = 'inherit';
    editMemoDom.classList.add("d-none");
    submitMemoBtn.classList.remove("d-none");
  }
})

归档

  • 首先,还是给你的每一条Memos 增加一个按钮,并绑定一个点击事件:
<button class="archive-btn" onclick="archiveMemo(\''+data[i].id+'\')">归档</button>
  • 然后,添加点击事件
function archiveMemo(memoId) { //获取Memos的ID值
  memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token"); //登录信息
  if(memosOpenId && memoId){ //判断是否登录以及获取到Memos的ID值
    var memoUrl = memosPath+"/api/v1/memo/"+memoId+"?openId="+memosOpenId;
    var memoBody = {id:memoId,rowStatus:"ARCHIVED"};
    fetch(memoUrl, {
      method: 'PATCH',
      body: JSON.stringify(memoBody),
      headers: {
        'Content-Type': 'application/json'
      }
    }).then(function(res) {
      if (res.status == 200) {
        cocoMessage.success(
        '归档成功',
        ()=>{
          location.reload();
        })
      }
    })
  }
}

删除

  • 首先,还是给你的每一条Memos 增加一个按钮,并绑定一个点击事件:
<button class="delete-btn" onclick="deleteMemo(\''+data[i].id+'\')">删除</button>
  • 然后,添加点击事件
function deleteMemo(memoId) {
  memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token");
  if(memosOpenId && memoId){
    var memoUrl = memosPath+"/api/v1/memo/"+memoId+"?openId="+memosOpenId;
    fetch(memoUrl, {
      method: 'DELETE',
      headers: {
        'Content-Type': 'application/json'
      }
    }).then(function(res) {
      if (res.status == 200) {
        cocoMessage.success(
        '删除成功',
        ()=>{
          location.reload();
        })
      }
    }).catch(err => {
      cocoMessage.error('出错了,再检查一下吧')
    })
  }
}

开始连接,给Memos页面增加转发功能

2023年7月6日 20:30

前言

其实这个想法来自于 @小饿 同学。在Memos页面拥有了发布框之后,我也一直在想,除了方便快捷之外,怎么可以让发布框更好用。转发功能的概念,让我眼前一亮。

小饿: 转发功能,其实就是复制好友说说再评论,就更加接近微博了,信息连接效率会指数级提升。

Memos诞生很长时间以来,很多人都是当个笔记应用,记录生活。后来因为[@林木木] 开始折腾。有了各种API,开始出现单独的Memos页面,也有了浏览器插件,各种手机APP。生态圈一下子就建立起来了。再到后来,木木兄为Memos开发了广场页面,尽可能多的将大家的信息聚合起来,自此,Memos开启了社交时代。

木木的「广场」页面,其实已经非常趋近于微博。发布框加上后,功能已经非常完整了。所以当你拥有了一个Memos广场页面,并且加上了发布框。这个转发的功能,也可以折腾起来了。

部署

  • 首先,给你的每一条Memos 增加一个转发按钮,并绑定一个点击事件。
<a onclick="transPond('+JSON.stringify(memosForm)+')"></a>
  • 然后,定义转发的内容。
let memosForm = {
  creatorName:creatorName,
  content:transData,
  url:memosLink
};
  • 再然后,需要找到你页面中的发布框以及当前登录信息。
var memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token");
var memosPath = window.localStorage && window.localStorage.getItem("memos-access-path");
var getEditor = window.localStorage && window.localStorage.getItem("memos-editor-display");
var memosTextarea = document.querySelector(".memos-editor-textarea");
var memosVisibilitySelect = document.querySelector(".select-memos-value");
var submitMemoBtn = document.querySelector(".submit-memos-btn");
var editMemoDom = document.querySelector(".edit-memos");
var editMemoBtn = document.querySelector(".edit-memos-btn");
var cancelEditBtn = document.querySelector(".cancel-edit-btn");
  • 最后,给发布框中,添加转发内容。
var transRes = '[@'+ a.creatorName+']('+a.url+') \n\n> '+a.creatorName+': '+a.content;
memosTextarea.value = transRes;
memosTextarea.style.height = memosTextarea.scrollHeight + 'px';
document.body.scrollIntoView({behavior: 'smooth'})

完整点击事件代码如下:

//转发
function transPond(a){
  var memosTextarea = document.querySelector(".memos-editor-textarea");
  var getEditor = window.localStorage && window.localStorage.getItem("memos-editor-display");
  memosOpenId = window.localStorage && window.localStorage.getItem("memos-access-token");
  if(memosOpenId && getEditor == "show"){
    var transRes = '[@'+ a.creatorName+']('+a.url+') \n\n> '+a.creatorName+': '+a.content;
    memosTextarea.value = transRes;
    memosTextarea.style.height = memosTextarea.scrollHeight + 'px';
    document.body.scrollIntoView({behavior: 'smooth'})
  }else{
    window.open(a.url);//如果没登录,则不转发直接跳转。
  }
}

最后

效果如下:

给Memos页面添加发布框

2023年7月1日 21:39

起因

最开始是看到 @林木木 发的一条哔哔。说是想要在Memos页面内嵌入哔哔单页,从而可以实现在一个页面内发布哔哔以及浏览哔哔。寻思这样一来,体验确实是可以好很多,不需要切来切去,更有沉浸感。

部署代码

  • HTML
<div id="memos"></div>
  • CSS
.load-memos-editor{position:fixed;right:1rem;bottom:1rem;background-color:#ebeced;}
.memos-editor-body{display:flex;border-radius:.33rem;background-color:var(--light-background-secondary);flex-direction:column}
.dark .memos-editor-body {background-color: var(--dark-background-secondary);}
.memos-editor-content,.memos-editor-footer,.memos-editor-option{display: flex;}
.memos-editor-content .memos-editor-inputer{overflow-x:hidden;overflow-y:clip;padding:0;width:100%;max-height:160px;outline:2px solid transparent;outline-offset:2px;background-color:transparent;white-space:pre-wrap;line-height:2rem;resize:none;overflow-wrap:anywhere;word-break:normal}
.memos-editor-tools{display: flex;flex-direction: column;}
.memos-editor-tools .action-btn {padding: .25rem;}
.memos-editor-tools .memos-tag-list {display:flex;flex-wrap:wrap;align-items:center;line-height:2;}
.memos-editor-tools .memos-tag {position:relative;}
.memos-editor-tools .memos-tag a {flex:1}
  • JS
<script>
var memosData = {
    dom:'#memos',
};
</script>
  • 页面布局

grid.css

  • 字体图标

iconfont.css

  • Javascript

memos-editor.js

  • 消息提醒弹窗
https://github.com/TheWindRises-2/coco-message
  • Animate.css
https://animate.style/

使用说明

  • 填入 Memos Open API ,格式如下:
https://memos.example.com/api/memo?openId=<Memos Open API>
  • 开始哔哔吧

在线围观

围观地址:https://nuoea.com/memos

致谢

更新日志

  • 2023-07-01 正式上线
  • 2023-07-02 新增:上传图片
  • 2023-07-02 修复:API地址多出/导致“Memos Open API 有误,请重新输入!”的问题
  • 2023-07-03 新增:随机回顾一条 Memos
  • 2023-07-04 新增:切换当前 Memos Open API
  • 2023-07-09 新增:光标自动定位(感谢 @空白生活
  • 2023-07-09 修复:随机Memos中最多只能显示1个标签的问题(感谢 @空白生活
  • 2023-07-18 新增:适配 0.14.0 版本API
  • 2023-07-19 新增:资源库图片删除
  • 2023-07-19 新增:编辑按钮
  • 2023-07-19 修复:无法新增TAG标签的问题

所谓尼康战歌

2023年6月26日 21:01

尼康

尼康(Nikon),是日本的一家著名相机制造商,成立于1917年,当时名为日本光学工业株式会社。1988年该公司依托其照相机品牌,更名为尼康株式会社。该品牌相机每年宣传片都会使用同一首歌作为背景音乐,而这首歌被尼康品牌粉丝们称为是尼康战歌,迅速形成一个梗爆红网络。

每次看Links的视频,每次当那首Welcome Home, Son的旋律响起,都会热血沸腾,随之想起使用尼康相机拍摄的那些瞬间。摄影是记录美好的事情,而音乐同样是。

关于

Welcome Home, Son 作为尼康101周年广告歌,自由的旋律加上吟唱的唱腔,配合上打击乐及和声,一下子就让人仿佛置身于广阔的世界中,去欣赏、记录这个世界的美好。所以每次听到这首歌,我都会想起Links说的那句:

无论你手上用的是哪一台相机,我都由衷的建议你走出去,去看看这个美丽的世界,欣赏久未凝视过的日出和日落,还有城市里难能一见的满天星辰,灿烂星河,按下快门,去拍下你眼中看到的曼妙风景,去记录你所在乎的人和事。只有这样,相机的参数才被赋予了真正的意义。

一起欣赏吧。

富士直出日系治愈色调

2023年6月22日 13:35

前言

一直很喜欢滨田英明的色调,之前用尼康的时候,后期也用Lightroom尝试着去调出滨田英明的照片中那种温暖治愈的感觉。但是每次出去旅行,回来后面对成百上千张照片做后期,光是想想就头大了。自从看到富士的机内直出效果之后,忽然就发现,这不就是我一直想要的相机么。

于是把尼康灭门,在XT5发售的时候,原价购入了XT5套机。玩了大半年,每次用到这套滤镜,都忍不住惊叹,这直出色彩也太赞了吧,于是想跟大伙分享一下这款滤镜。

滤镜

这款滤镜主要模拟的是Fuji NC(Natural Color)胶片的色彩效果。NC胶片是富士胶片公司推出的一种自然色彩胶片,它的特点是色彩饱和度适中,色调自然,适合拍摄风景、人像等各种主题。NC滤镜模拟的胶片色彩效果,可以使得照片看起来更加真实,呈现出自然、柔和的色调。在使用这个滤镜的时候,需要注意以下几点:

  • 需要非常好的光线,如果室内光线不好,需要注意补光;
  • 增加曝光1-2档;
  • 尽量保证画面的干净;

参数

核心是白平衡,我选用色温5200k这个固定值,这样做的好处是,既可以如实表达各种色彩,也可以让天空的颜色统一。以下是详细参数:

名称 参数
胶片模拟 classic negative
颗粒效果
色彩效果
彩色FX蓝色
白平衡 5200K
白平衡偏移 R:-5 B:3
动态范围 DR400
色调曲线 H:-1.5 S:+0.5
色彩 +1
税度 +1
高ISO降噪 0
清晰度 0

最后

真的是随手拍都很好看。

❌
❌