一. 影像編輯器 Monica
Monica 是一款跨平台的桌面影像編輯器,使用 Kotlin Compose Desktop 進行開發基於 mvvm 架構,使用 koin 作為依賴註入的框架。
Monica 開發的背景和初衷可以看 。
目前 Monica 還處於開發階段,目前版本的主要功能包括:
載入本地圖片、網路圖片。
對圖片進行局部模糊、打馬賽克。
對圖片進行塗鴉,並保存塗鴉的結果。
對圖片進行裁剪。
調整圖片的飽和度、色相、亮度。
提供 20 多款濾鏡,大多數濾鏡也可以單獨調整參數。
放大、縮小影像。
對修改的影像進行保存。
二. 影像塗鴉
塗鴉是 Monica 的基礎功能,就是對影像進行隨意塗畫。
點選上圖帶提示的按鈕,就可以進入塗鴉界面,對影像進行隨意的塗鴉。
由於是桌面軟體,畫筆由滑鼠進行控制。畫筆預設是黑色的,可以隨著滑鼠的移動而進行繪制曲線。
Monica 支持選擇畫筆的顏色。
以及選擇畫筆的粗細。
塗鴉完之後,記得保存圖片,這樣回到主界面之後才真正的保存結果了。
塗鴉的效果主要是基於 Canvas 來繪制 Path 實作的。難點在於手勢的事件處理和 Path 的繪制,以及將最終的結果保存到 bitmap 。
特別是將 Canvas 的結果保存在網上的資料比較少,所以貼了出來:
funsaveCanvasToBitmap(density:Density, paths: List<Pair<Path, PathProperties>>, image: ImageBitmap, state:ApplicationState) {
val bitmapWidth = image.width
val bitmapHeight = image.height
val drawScope = CanvasDrawScope()
val size = Size(bitmapWidth.toFloat(), bitmapHeight.toFloat())
val canvas = Canvas(image)
drawScope.draw(
density = density,
layoutDirection = LayoutDirection.Ltr,
canvas = canvas,
size = size,
) {
state.isDoodle = false
state.togglePreviewWindow(false)
paths.forEach {
val path = it.first
val property = it.second
drawPath(
color = property.color,
path = path,
style = Stroke(
width = property.strokeWidth,
cap = property.strokeCap,
join = property.strokeJoin
)
)
}
}
state.addQueue(state.currentImage!!)
state.currentImage = image.toAwtImage()
}
三. 影像裁剪
點選帶提示的裁剪按鈕
可以進入影像裁剪的界面
使用者可以基於九宮格的選框,對影像進行裁剪。
裁剪完之後,會在主界面顯示截取之後的影像。
影像裁剪也是大量基於 Canvas 的操作。
四. 有趣的濾鏡
目前版本新增了一些濾鏡,選擇2款有意思的介紹。
一款是生成鉛筆畫的效果:
另一款是生成油畫的效果:
五. 總結
Monica 目前到了 0.2 版本,暫時還不提供安裝包不過可自行編譯。等版本相對穩定後,會提供 Windows/Linux/MacOS 的安裝包。因為,接下來還會有大量的架構調整和程式碼重構。
後期 Monica 的重點是增加對影像各種形狀的裁剪,對現有演算法的效率進行提升,增加使用者和軟體的互動,嘗試引入一些深度學習的演算法等等。
推薦閱讀
掃碼檢視深度學習系統化學習路線圖