圖像編輯器 Monica 之圖像涂鴉、裁剪、有趣的濾鏡

一. 圖像編輯器 Monica

Monica 是一款跨平臺(tái)的桌面圖像編輯器,使用 Kotlin Compose Desktop 進(jìn)行開發(fā)基于 mvvm 架構(gòu),使用 koin 作為依賴注入的框架。

Monica github 地址:https://github.com/fengzhizi715/Monica

Monica 開發(fā)的背景和初衷可以看 使用 Kotlin Compose Desktop 開發(fā)的圖像編輯器。

目前 Monica 還處于開發(fā)階段,當(dāng)前版本的主要功能包括:

  • 加載本地圖片、網(wǎng)絡(luò)圖片。
  • 對(duì)圖片進(jìn)行局部模糊、打馬賽克。
  • 對(duì)圖片進(jìn)行涂鴉,并保存涂鴉的結(jié)果。
  • 對(duì)圖片進(jìn)行裁剪。
  • 調(diào)整圖片的飽和度、色相、亮度。
  • 提供 20 多款濾鏡,大多數(shù)濾鏡也可以單獨(dú)調(diào)整參數(shù)。
  • 放大、縮小圖像。
  • 對(duì)修改的圖像進(jìn)行保存。

二. 圖像涂鴉

涂鴉是 Monica 的基礎(chǔ)功能,就是對(duì)圖像進(jìn)行隨意涂畫。


1.png

點(diǎn)擊上圖帶提示的按鈕,就可以進(jìn)入涂鴉界面,對(duì)圖像進(jìn)行隨意的涂鴉。


2.png

由于是桌面軟件,畫筆由鼠標(biāo)進(jìn)行控制。畫筆默認(rèn)是黑色的,可以隨著鼠標(biāo)的移動(dòng)而進(jìn)行繪制曲線。


3.png

Monica 支持選擇畫筆的顏色。


4.png

以及選擇畫筆的粗細(xì)。


5.png

涂鴉完之后,記得保存圖片,這樣回到主界面之后才真正的保存結(jié)果了。


6.png

涂鴉的效果主要是基于 Canvas 來繪制 Path 實(shí)現(xiàn)的。難點(diǎn)在于手勢(shì)的事件處理和 Path 的繪制,以及將最終的結(jié)果保存到 bitmap 。

特別是將 Canvas 的結(jié)果保存在網(wǎng)上的資料比較少,所以貼了出來:

    fun saveCanvasToBitmap(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()
    }

三. 圖像裁剪

點(diǎn)擊帶提示的裁剪按鈕


7.png

可以進(jìn)入圖像裁剪的界面


8.png

用戶可以基于九宮格的選框,對(duì)圖像進(jìn)行裁剪。


9.png

裁剪完之后,會(huì)在主界面顯示截取之后的圖像。


10.png

圖像裁剪也是大量基于 Canvas 的操作。

四. 有趣的濾鏡

當(dāng)前版本新增了一些濾鏡,選擇2款有意思的介紹。

一款是生成鉛筆畫的效果:


11.png

另一款是生成油畫的效果:


12.png

五. 總結(jié)

Monica 目前到了 0.2 版本,暫時(shí)還不提供安裝包不過可自行編譯。等版本相對(duì)穩(wěn)定后,會(huì)提供 Windows/Linux/MacOS 的安裝包。因?yàn)椋酉聛磉€會(huì)有大量的架構(gòu)調(diào)整和代碼重構(gòu)。

Monica github 地址:https://github.com/fengzhizi715/Monica

后期 Monica 的重點(diǎn)是增加對(duì)圖像各種形狀的裁剪,對(duì)現(xiàn)有算法的效率進(jìn)行提升,增加用戶和軟件的交互,嘗試引入一些深度學(xué)習(xí)的算法等等。

該系列的相關(guān)文章:
使用 Kotlin Compose Desktop 開發(fā)的圖像編輯器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容