當前位置: 妍妍網 > 碼農

影像編輯器 Monica 之影像塗鴉、裁剪、有趣的濾鏡

2024-05-30碼農

一. 影像編輯器 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 的重點是增加對影像各種形狀的裁剪,對現有演算法的效率進行提升,增加使用者和軟體的互動,嘗試引入一些深度學習的演算法等等。


    推薦閱讀

    掃碼檢視深度學習系統化學習路線圖