image_editor(图像编辑器)招募

发布人:仓颉技术交流平台官方
分类:音视频 / 处理与编辑

现招募开发者共同参与基于仓颉语言的图像处理模块开发项目。本项目旨在构建一个功能完备、性能优异的图像处理库,为仓颉语言生态提供专业级的图像处理能力,我们期待与追求技术卓越的开发者共同推动国产编程语言的发展。

等待接取
2025-11-20
143

悬赏内容

招募内容

1. 项目简介与愿景

本项目是一项旨在丰富仓颉语言开源生态的公益性开发项目。我们的目标是基于仓颉语言,从零开始设计并实现一个功能全面、性能卓越、架构清晰的图像处理库。该库将提供从基础图像变换到高级图形合成的完整解决方案,其质量目标是为未来基于仓颉语言的图形应用(如图像编辑器、UI框架、游戏引擎等)奠定坚实可靠的底层基础。

我们寻求的不是简单的功能实现,而是对软件工程卓越性的追求。本项目强调架构设计的合理性、代码的可维护性、测试的完备性以及性能的可度量性。我们诚邀对技术有极致追求、对开源有贡献热情的开发者加入,共同打造一个可称为“标杆”的仓颉语言项目。

2. 项目核心功能模块详细说明

项目将采用分层架构,核心模块如下表所示:

模块名称

核心职责

关键质量属性

核心数据层 (Core Data)

封装图像数据的底层表示(如 ImageBuffer),管理像素内存、颜色空间、元数据。

内存安全、零拷贝设计、线程安全

算法处理层 (Processing)

实现独立的、无状态的图像处理算法(裁剪、滤镜、变换等)。

算法正确性、性能(时间复杂度)、可测试性

绘图合成层 (Rendering)

提供画布(Canvas)抽象,支持矢量图形绘制、文本渲染、图层混合。

渲染准确性、抗锯齿质量、API 友好性

API 接口层 (API)

对外提供简洁、一致且符合仓颉语言习惯的面向对象 API。

接口稳定性、易用性、文档完整性

详细功能规格:

2.1 基础图像操作

  • 几何变换

    • 旋转:支持任意角度旋转,并提供高质量的插值算法(如双线性/双三次插值)。

    • 翻转:水平与垂直翻转。

    • 裁剪:支持基于矩形区域的精确裁剪,需进行边界检查。

    • 缩放:支持非等比例缩放,并提供是否保持原宽高比的选择。

  • 色彩处理

    • 颜色矩阵:应用 4x5 或 5x5 的颜色矩阵进行复杂的色彩调整(亮度、对比度、饱和度、色相)。

    • 通道操作:独立的 R, G, B, Alpha 通道调整。

2.2 高级合成与绘图

  • 混合模式 (Blend Modes):实现标准的 Porter-Duff 合成操作(如 SrcOver)及常见混合模式(如 Multiply, Screen, Overlay)。

  • 多图像合并:将多张图片按指定位置、尺寸和混合模式合成到指定画布上。

  • 矢量绘图

    • 基本图形:点、直线、矩形、圆角矩形、圆形、椭圆。

    • 路径:支持贝塞尔曲线(二次、三次)和自定义路径的绘制与填充。

  • 文本渲染:支持在指定位置渲染抗锯齿文本,可定制字体、大小、颜色。

3. 质量认证与交付物要求

本部分是本招募的核心,我们对项目产出有极高的质量标准。

3.1 代码与架构质量

  • 设计模式:代码必须展现出良好的软件设计,合理运用设计模式(如工厂模式、策略模式、命令模式等),避免上帝对象或函数式编程中常见的面条代码。

  • 仓颉语言特性:充分利用仓颉语言的现代特性(如内存所有权模型、泛型、错误处理等),写出“地道”的仓颉代码。

  • 模块化与解耦:各功能模块必须高度内聚、低度耦合。例如,算法层不应依赖具体的文件 IO 实现。

示例:期望的接口设计

// 这是一个期望的、符合工程规范的接口设计示例,并非最终实现。
// 它展示了清晰的类型抽象和分层。

// 核心数据抽象
public class ImageBuffer {
    width: i32;
    height: i32;
    pixels: []ColorRGBA; // 像素数据

    public new(width: i32, height: i32): ImageBuffer;
    public get_pixel(x: i32, y: i32): ColorRGBA;
    public set_pixel(x: i32, y: i32, color: ColorRGBA): void;
}

// 图像处理操作抽象为独立的、可测试的“命令”
public interface ImageOperation {
    apply(image: ImageBuffer): Result<ImageBuffer, ImageError>;
}

// 具体的操作实现
public class RotateOperation : ImageOperation {
    angle: f64;
    interpolation: InterpolationMode;

    public new(angle: f64, interpolation: InterpolationMode);
    public apply(image: ImageBuffer): Result<ImageBuffer, ImageError> {
        // 具体的旋转算法实现
        // 返回新的ImageBuffer或错误
    }
}

// 核心编辑器,负责执行操作流水线
public class ImageEditor {
    public apply_operations(image: ImageBuffer, operations: []ImageOperation): Result<ImageBuffer, ImageError> {
        // 依次应用每个操作,并进行错误传播
    }
}

3.2 测试与可靠性要求

测试类型

覆盖率要求

说明

单元测试 (Unit Test)

≥ 95%

每个公开函数、每个算法分支(如不同的插值模式)都必须有对应的测试用例。

集成测试 (Integration Test)

核心工作流 100% 覆盖

测试多个模块协同工作的场景,如图像经过“裁剪->旋转->缩放”流水线后的结果。

黄金测试 (Golden Test)

所有图像处理操作

将处理结果与预先计算好的、经过验证的“黄金”图片进行像素级对比,确保算法输出稳定。

模糊测试 (Fuzz Test)

对输入解析模块

提供随机、无效的输入数据,验证程序的健壮性,确保不会崩溃或产生未定义行为。

性能基准测试 (Benchmark)

所有关键操作

提供性能基准数据,监控代码变更是否引入性能回归。

3.3 文档与工程化

  • API 文档:使用仓颉语言的文档工具为所有公共 API 生成详细文档,包含用法示例。

  • 设计文档:提供架构决策记录 (ADR),解释关键设计选择的理由。

  • 贡献指南:包含完善的 CONTRIBUTING.mdREADME.md,指导后续开发者如何参与。

4. 交付物清单

  1. 完整的源代码仓库:包含所有模块的实现、测试和构建脚本。

  2. 全面的测试套件与报告:包括单元测试、集成测试的代码和执行结果报告。

  3. 技术文档:架构说明、API 文档、用户指南。

  4. 性能分析报告:关键操作的性能基准数据。

  5. 代码质量报告:由静态分析工具(如 Linter、Formatter)生成的报告。

5. 参与方式与协作模式

本项目将采用开源社区常见的协作模式:

  • 通过 Git​ 进行版本控制,在 Gitee/Github​ 上托管代码。

  • 使用 Pull Request​ 进行代码贡献,每个 PR 必须经过至少一位核心贡献者的代码审查

  • 代码审查将重点关注设计合理性、实现正确性、测试覆盖率和代码风格

相关附件

暂无附件

质量认证要求

交付件

NO

交付件描述

备注

1

三方库源代码

源代码

2

三方库测试方案和用例

测试用例和文档

3

用户手册,API文档,设计文档,license文档

 资料和文档

验收标准

1.功能

  1. 三方库必须有明确的功能;

  2. 如果参考对标库移值开发,功能与参考三方库保持一致。

2.资料

  1. Readme:包含简介,软件架构,目录结构,下载安装(编译构建),接口说明,使用示例,约束限制,开源协议,参与贡献等内容;

  2. Changelog,三方库版本需包含基本的修改说明。

3.标准遵从性(可选),三方库实现需满足对应协议或行业标准,举例

  1. appquth:支持对OAuth 的PKCE扩展;

  2. icu4j:支持unicode标准库,通用字符集ISO/IEC 10646。

4.性能目标

  1. 性能敏感三方库接口运行性能持平对标三方库

5.开源协议遵从,必须包含License文件

  1. 放置合适的开源License协议,建议Apache License Version 2.0;

  2. 引用或参考开源三方库,需遵从开源协议。

6.网络安全要求

  1. 满足基础的网络安全红线及隐私要求,符合安全编码规范。

过程质量要求

指标分类

指标名称

指标要求

度量工具

牵引 OR Must

代码度量

平均文件代码行

≤300 LOC

CMetricsPlus,CJMetric

Must

总文件重复率

C/C++≤4%;相比开源不劣化

CMetricsPlus,CJMetric

Must

源文件重复率

C/C++≤4%;相比开源不劣化

CMetricsPlus,CJMetric

Must

平均函数或方法代码行*

≤30  LOC

CMetricsPlus,CJMetric

Must

总代码重复率

C/C++≤10%;相比开源不劣化

CMetricsPlus,CJMetric

Must

源文件代码重复率

C/C++≤10%;相比开源不劣化

CMetricsPlus,CJMetric

Must

平均圈复杂度

≤5;相比开源不劣化

CMetricsPlus,CJMetric

Must

冗余代码

“0” 【2】;

CMetricsPlus,CJMetric

Must

不安全函数

NA

CMetricsPlus,CJMetric

Must

静态检查

编译告警

“0” 【2】

Compile工具

牵引

通用静态告警

“0” 【2】

Pclint plus,CJLINT

Must

开发者测试

DT用例密度(个/KLOC)

> 40

手工

牵引 

DT代码语句覆盖率

>=85%

Gcov,cjcov

牵引

DT代码分支覆盖率

>=50%

Gcov,cjcov

牵引

未做DT文件数

0

手工

牵引

问题解决率

遗留问题DI

整体<10

Issue

牵引 

遗留致命缺陷数(0)

0

Issue

Must

累计缺陷解决率

85%

Issue

牵引 

软件开发

每日构建成功率

100%

CI

牵引

测试评估

测试缺陷密度(/KLOC)

5-9

人工

牵引

测试用例密度(个/KLOC)

20-40

人工

牵引

初验用例自动化率

100%

CIDA

牵引 

HLT自动化用例比率

【85%,95%】

CIDA

牵引 

开源第三方(含构建工具)

开源片段引用

0(除例外备案类)

FOSSBOT+人工

Must

可信构建

二进制一致性

0(含可澄清)

人工

Mus