imagesharp - 确定照片区域的合同颜色
问题描述
试图找出一种方法来确定照片区域的最佳对比色。对比色将用作某些叠加文本的颜色。
使用 Six Labor ImageSharp,到目前为止,我已经能够:
- 将图像流加载到 Sixlabor ImageSharp 图像中:
myImage = Image.Load(imageStream)
- 使用 Crop 进行突变以划分出文本应位于的大致区域:
myImage.Mutate(x =>x.Crop(rectangle))
但是如何确定这个裁剪区域的平均/主要颜色?
我在某处看到一种方法是将裁剪区域的大小调整为一个像素的大小。这很容易做到(下一步是:)myImage.Mutate(x => x.Resize(1,1))
,但是我该如何提取这个像素的颜色呢?
当我得到这种颜色时,我计划使用这种方法来计算对比色。
解决方案
这是我最终解决这个问题的方法,使用该算法确定最佳对比字体颜色(黑色或白色)。
private Color GetContrastColorBW(int x, int y, int height, int width, stream photoAsStream)
{
var rect = new SixLabors.Primitives.Rectangle(x,y, height, width);
var sizeOfOne = new SixLabors.Primitives.Size(1,1);
using var image = Image.Load<Rgba32>(photoAsStream);
var croppedImageResizedToOnePixel = image.Clone(
img => img.Crop(rect)
.Resize(sizeOfOne));
var averageColor = croppedImageResizedToOnePixel[0, 0];
var luminance = (0.299 * averageColor.R + 0.587 * averageColor.G + 0.114 * averageColor.B) / 255;
return luminance > 0.5 ? Color.Black : Color.White;
}
推荐阅读
- javascript - 动态更新 Chart JS 数据并添加新数据,删除旧数据以创建时间线“like”图表
- javascript - Iterating numerical value and send as props
- javascript - 验证多输入 laravel
- javascript - 来自异步库的 async.map 和来自 bluebird 的 Promise.map 有什么区别?
- c# - 在 ElasticSearch Nest C# 中查询内部记录
- python-3.x - 如何在与相同键关联的计划字符串中获取字典值
- c++ - 在 C++ 中获取二维向量的行向量
- spring-data-neo4j - 动态获取 Node Neo4j 的属性
- android - 使用 SoundPool 按顺序播放两个声音
- javascript - 没有javascript的CSS菜单下划线幻灯片?