svg - 给定已知的背景颜色 (#000) 和已知的前景色 (#fff),我如何计算不透明度以匹配参考图像?
问题描述
我有一个以完美黑色背景开头的短视频剪辑。在短时间内,它将以全白字幕过渡。中间帧显示各种灰色调。
在另一个 SO question 中,我找到了一个单线,可以让我找到最亮的像素:
convert 0000$a.png -colorspace HSB -format %c histogram:info:- | sort -t',' -gr -k 3 | head -1 | sed 's/.* hsb.*,.*,\([0-9.]*\)%.*/\1/
在我的视频帧范围内,我得到了一个从 0 到 100 的漂亮对数曲线。我想我可以将这些数字放入 svg 的文本元素不透明度中,然后导出一个 png。
但是,结果与我试图模仿的原始结果大不相同。第 50 帧的亮度为 8.49447%。它如下所示:
这在我看来是黑色的(第 49 帧测量为 0%)。
如果我将白色文本设置为 8.49% 的不透明度,我会得到以下结果:
这仍然很暗,但更容易察觉。
显然,像素亮度与黑色背景上的白色不透明度不同。数字本身是正确的,因为我的曲线以看起来合适的速度淡入,但它开始变得更亮并逐帧保持更亮,直到它们都达到 100%。
我可以将此值转换为匹配的不透明度吗?我是否需要完全不同的值?如果这只是几帧,我只会盯着它们看,但我有一些看起来像低千的东西来正确(用于各种场景)。
我正在使用的命令行如下:
for a in `seq -f %06g 50 72`; do o=`convert $a.png -colorspace HSB -format %c histogram:info:- | sort -t',' -gr -k 3 | head -1 | sed 's/.* hsb.*,.*,\([0-9.]*\)%.*/\1/'`; p=0`echo "scale=6;$o/100"|bc -l`; sed "s|ABC|$p|" ../svg/scene000.svg > ../temp.svg; /Applications/Inkscape.app/Contents/Resources/bin/inkscape -f /Users/user/ep1/temp.svg -e /Users/user/ep1/4k/$a.png -z > /dev/null; echo -e "$a.png\t$o\t\t$p"; done
我看到了这些帧的值:
000050.png 8.49447 0.084944
000051.png 11.0702 0.110702
000052.png 16.6186 0.166186
000053.png 27.7847 0.277847
000054.png 32.5076 0.325076
000055.png 40.0663 0.400663
000056.png 46.6477 0.466477
000057.png 52.6319 0.526319
000058.png 62.2218 0.622218
000059.png 64.1088 0.641088
000060.png 71.5642 0.715642
000061.png 76.4314 0.764314
000062.png 81.3782 0.813782
000063.png 81.3782 0.813782
000064.png 85.1114 0.851114
000065.png 85.1114 0.851114
000066.png 88.8427 0.888427
000067.png 91.8013 0.918013
000068.png 93.7057 0.937057
000069.png 94.4534 0.944534
000070.png 97.7247 0.977247
000071.png 97.7247 0.977247
000072.png 99.8274 0.998274
解决方案
推荐阅读
- python - Unicode 错误使用 to_csv 尽管指定编码 = 'utf-8'
- c - 如果在带有 tmpfs 的容器中运行,为什么介子无法确定 time_t 的大小?
- wordpress - 使用插件的分类模板
- javascript - Moment.js 在两个日期之间没有像我预期的那样工作
- python - Python - 使用正则表达式从文本数据中删除变量
- abap - 在 ALV-grid 的一个单元格中显示多行
- android - 使用 API 28 和“androidx.appcompat”库项目显示“AppCompatActivity”符号未找到
- javascript - 每个测试文件之前的 Jest 异步设置
- android - 科尔多瓦编辑配置不更新 AndroidManifest.xml
- java - 为什么 java "putAll" 不能深度复制 Map 的值元素?