一. 圖像編輯器 Monica
Monica 是一款跨平臺的桌面圖像編輯軟件风宁,使用 Kotlin Compose Desktop 進(jìn)行開發(fā)洁墙。
它基于 mvvm 架構(gòu),由于應(yīng)用層都是由 Kotlin 編寫的戒财,所以使用 koin 作為依賴注入框架热监。
Monica github 地址:https://github.com/fengzhizi715/Monica
Monica 目前還處于開發(fā)階段,當(dāng)前版本的主要功能包括:
- 支持加載本地圖片饮寞、網(wǎng)絡(luò)圖片孝扛。
- 支持對圖片進(jìn)行局部模糊、打馬賽克幽崩。
- 支持對圖片進(jìn)行涂鴉苦始,并保存涂鴉的結(jié)果。
- 支持圖片取色功能
- 支持圖像的翻轉(zhuǎn)慌申、旋轉(zhuǎn)陌选、縮放
- 支持各種形狀的裁剪,并保存裁剪的結(jié)果。
- 調(diào)整圖片的飽和度柠贤、色相香浩、亮度。
- 提供 20 多款濾鏡臼勉,大多數(shù)濾鏡可以單獨(dú)調(diào)整參數(shù)邻吭。
- 保存修改的圖像。
二. 多種形狀的裁剪
在該系列上一篇文章中宴霸,曾介紹過 Monica 的裁剪功能〈亚纾現(xiàn)在 Monica 可以通過設(shè)置裁剪屬性支持多種形式的裁剪。
下面瓢谢,我們以正六邊形為裁剪框來裁剪圖像畸写。
在主界面顯示截取之后的圖像。
接下來氓扛,還可以以愛心為裁剪框來裁剪圖像枯芬。
三. 圖像取色
在 Monica 的基礎(chǔ)功能里,有一個(gè)比較有意思的功能采郎,對圖像取色千所。
這個(gè)功能通過點(diǎn)擊圖像中的位置,獲取顏色相關(guān)的信息蒜埋,包括 HEX 顏色代碼值淫痰、RGB 值、 HSL 值和 HSV 值整份。
四. 基于查找表實(shí)現(xiàn)的色彩濾鏡
在計(jì)算機(jī)科學(xué)中待错,查找表(Lookup Table)是用簡單的查詢操作替換運(yùn)行時(shí)計(jì)算的數(shù)組或者關(guān)聯(lián)數(shù)組這樣的數(shù)據(jù)結(jié)構(gòu)。由于從內(nèi)存中提取數(shù)值經(jīng)常要比復(fù)雜的計(jì)算速度快很多烈评,所以這樣得到的速度提升是很顯著的火俄。
在圖像處理中,查找表將索引號與輸出值建立聯(lián)系础倍。查找表是一種常用的圖像處理方法烛占,用于對圖像進(jìn)行像素級別的顏色映射或圖像增強(qiáng)操作。LUT 查找表可以實(shí)現(xiàn)快速沟启、高效的顏色轉(zhuǎn)換和像素操作,尤其在處理大量像素的情況下具有優(yōu)勢犹菇。
Monica 參考了 OpenCV 中 applyColorMap() 函數(shù)德迹,通過 LUT 在給定的圖像上應(yīng)用色彩映射。
const val AUTUMN_STYLE: Int = 0
const val BONE_STYLE = 1
const val COOL_STYLE = 2
const val HOT_STYLE = 3
const val HSV_STYLE = 4
const val JET_STYLE = 5
const val OCEAN_STYLE = 6
const val PINK_STYLE = 7
const val RAINBOW_STYLE = 8
const val SPRING_STYLE = 9
const val SUMMER_STYLE = 10
const val WINTER_STYLE = 11
fun getColorFilterLUT(style: Int): Array<IntArray> {
return when (style) {
AUTUMN_STYLE -> AutumnLUT.AUTUMN_LUT
BONE_STYLE -> BoneLUT.BONE_LUT
COOL_STYLE -> CoolLUT.COOL_LUT
HOT_STYLE -> HotLUT.HOT_LUT
HSV_STYLE -> HsvLUT.HSV_LUT
JET_STYLE -> JetLUT.JET_LUT
OCEAN_STYLE -> OceanLUT.OCEAN_LUT
PINK_STYLE -> PinkLUT.PINK_LUT
RAINBOW_STYLE -> RainbowLUT.RAINBOW_LUT
SPRING_STYLE -> SpringLUT.SPRING_LUT
SUMMER_STYLE -> SummerLUT.SUMMER_LUT
WINTER_STYLE -> WinterLUT.WINTER_LUT
else -> AutumnLUT.AUTUMN_LUT
}
}
下面的 ColorFilter 濾鏡揭芍,實(shí)現(xiàn)了 12 種風(fēng)格的色彩映射胳搞。
class ColorFilter(val style: Int = 0) : ColorProcessorFilter() {
private fun getStyleLUT(style: Int): Array<IntArray> = getColorFilterLUT(style)
override fun doColorProcessor(dstImage: BufferedImage): BufferedImage {
var tr = 0
var tg = 0
var tb = 0
val lut = getStyleLUT(style)
val size: Int = R.size
for (i in 0 until size) {
tr = R[i].toInt() and 0xff
tg = G[i].toInt() and 0xff
tb = B[i].toInt() and 0xff
R[i] = lut[tr][0].toByte()
G[i] = lut[tg][1].toByte()
B[i] = lut[tb][2].toByte()
}
return toBufferedImage(dstImage)
}
}
五. 總結(jié)
Monica 目前到了 0.2.3 版本,后期的重點(diǎn)是增加優(yōu)化部分算法、提高效率肌毅,增加用戶和軟件的交互筷转,嘗試引入一些深度學(xué)習(xí)的算法等等。然后悬而,接下來會考慮提供各個(gè)平臺的安裝包呜舒。
Monica github 地址:https://github.com/fengzhizi715/Monica
該系列的相關(guān)文章:
圖像編輯器 Monica 之圖像涂鴉、裁剪笨奠、有趣的濾鏡
使用 Kotlin Compose Desktop 開發(fā)的圖像編輯器