站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        這款JS輕量編輯器能助你快速處理圖片!

        本文給大家介紹一款純 JS 實(shí)現(xiàn)的輕量化圖片編輯器,希望對(duì)需要的朋友有所幫助!

        這款JS輕量編輯器能助你快速處理圖片!

        前端(vue)入門到精通課程:進(jìn)入學(xué)習(xí)
        Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調(diào)試工具:點(diǎn)擊使用

        介紹

        因?yàn)橐恍┨攸c(diǎn)的工作場景, 寫文章的需要每次處理一些圖片, 在上面加說明文字, 或者加一些圖形

        剛開始使用 PPT 來處理, 一張張復(fù)制過去, 做一些邊框陰影處理, 再加一些圖形, 然后再導(dǎo)出來復(fù)制到需要的地方, 而且導(dǎo)出后的圖片之后可能不會(huì)再使用了還要清理.

        圖片多了重復(fù)操作的步驟就多了, 比較的繁瑣, 想想是否有個(gè)工具去解決這個(gè)問題, 搜了一下, 要么就是太重的專業(yè)的軟件, 要么就是不太符合批量的要求的軟件.【推薦:JavaScript視頻教程】

        簡單總結(jié)一下我的場景就是: 來了一堆圖片, 都需要做一些 "輕處理", 有些需要加文字, 或者加個(gè)箭頭等.

        • 關(guān)鍵就是 "輕", 不需要去等待幾十秒去打開, 進(jìn)行繁瑣的處理

        • 不需要下載就能使用, 用完關(guān)閉即可

        • 簡單, 易用, 可視化, 不需要一些復(fù)雜的操作, 鼠標(biāo)點(diǎn)擊就能完成

        一款純 JS 實(shí)現(xiàn)的輕量化圖片編輯器

        如果上面的場景是你所遇見的, 也想輕量快速的處理一些圖片, 這個(gè)項(xiàng)目就是為你而準(zhǔn)備的

        GenOptimizer 在線演示地址:https://genoptimizer.cn/

        這款JS輕量編輯器能助你快速處理圖片!

        • 支持多圖操作

        • 支持圖片拖拽添加

        • 支持所有屬性的動(dòng)態(tài)配置

        • 支持一鍵復(fù)制修改后的結(jié)果

        • 支持畫筆、文字、矩形、圓形、箭頭、線條、圖像的添加

        這個(gè)項(xiàng)目沒有依賴于任何的第三方框架, 以純 JS 實(shí)現(xiàn)

        最后抽象出了一個(gè)框架 (GenOptimizer), 以一種十分簡潔易用的方式寫出了整個(gè)項(xiàng)目

        下面是項(xiàng)目的 git 地址, 筆者初學(xué)前端, 還請多多指教

        • Github 地址:https://github.com/hellojuantu/image_border_optimizer

        • Gitee 地址:https://gitee.com/sanbuqu/image_border_optimizer

        下面是介紹框架的一些技術(shù)總結(jié), 特別的輕量化, 后序會(huì)對(duì)揭秘一下具體的實(shí)現(xiàn)方案

        Optimizer 框架特點(diǎn)

        這款JS輕量編輯器能助你快速處理圖片!

        • 事件、畫圖、交互 全局管理

        • 支持注冊自定義組件, 可自定義配置管理

        • 基于面向?qū)ο? 高度抽象代碼

        • 簡單易用, 能快速開發(fā)出各種效果

        • Optimizer 框架使用

        啟動(dòng)

        首先需要場景管理器, 通過繼承 GenScene 來創(chuàng)建場景, 場景里對(duì)于頁面中的多個(gè)控制器進(jìn)行管理

        class MainScene extends GenScene {     constructor(optimizer) {         super(optimizer)     } }
        登錄后復(fù)制

        全局使用 instance 獲取實(shí)例, 加載場景管理器, 最簡單的 Optimizer 程序就啟動(dòng)了

        GenOptimizer.instance(function(o){     let scene = MainScene.new(o)     o.runWithScene(scene) })
        登錄后復(fù)制

        場景管理器 (Scene)

        事件 (Event)

        頁面事件

        ... <div class='gen-auto-button-area'>     <button class='gen-auto-button' data-value='config.arg1'>text</button> </div> ... // 注冊頁面 class, 全局可用 this.registerPageClass({     "buttonArea": 'gen-auto-button-area',     ... }) // 注冊全局事件        this.registerGlobalEvents([          {         eventName: "click",         // 事件綁定的元素區(qū)域         className: sc.pageClass.buttonArea,         // 在 所有 configToEvents 響應(yīng)之 前 觸發(fā)         after: function(bindVar, target) {             // bindVar: 綁定的變量             // target: 事件觸發(fā)的目標(biāo)         },                 // 在 所有 configToEvents 響應(yīng)之 后 觸發(fā)         before: function(bindVar, target) {             // bindVar: 綁定的變量             // target: 事件觸發(fā)的目標(biāo)         },         // 事件響應(yīng)         configToEvents: {             // 自定義綁定的變量: 事件觸發(fā)后的響應(yīng)             "config.arg1": function(target) {                              },             "action.arg1": function(target) {                              },             ...         }     },     ... ])
        登錄后復(fù)制

        鼠標(biāo)事件

        this.resgisterMouse(function(event, action) {      // event 是鼠標(biāo)點(diǎn)擊的事件     // action 為鼠標(biāo)點(diǎn)擊的事件名稱         if (action == 'mouseleave') {         console.log('mouseleave canvas')     } else if (action == 'up') {         console.log('up canvas')     } else if (action == 'down') {         console.log('down canvas')     } else if (action == 'move') {         console.log('move canvas')     } })
        登錄后復(fù)制

        鍵盤事件

        this.registerAction("Backspace", status => {     // status 為 'down' 時(shí), 表示按下, 為 'up' 時(shí), 表示松開     console.log("Backspace", status) }) this.registerAction("s", status => {     // status 為 'down' 時(shí), 表示按下, 為 'up' 時(shí), 表示松開     console.log("s", status) })
        登錄后復(fù)制

        組件 (Component)

        注冊組件

        class MyComponent extends GenComponent {     constructor(control) {         super(control.scene)         this.control = control     }     ... } this.bindComponent('attribute', MyComponent.new(this))
        登錄后復(fù)制

        使用組件

        // 全局可使用組件 let data = ... this.getComponent('attribute').buildWith(data)
        登錄后復(fù)制

        總結(jié)

        本文介紹了筆者實(shí)現(xiàn)的一款可拖拽、低代碼、輕量化的圖片編輯器, 解決了繁瑣處理圖片的問題

        有時(shí)候一些小的操作, 都可能引發(fā)我們的思考, 如何才能更方便的處理這一類的問題?

        這個(gè)例子就是我的思考, 希望能給于你一點(diǎn)靈感或啟發(fā).

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 午夜精品一区二区三区免费视频| 亚洲国产综合精品中文字幕| 精品乱码久久久久久久| 日韩三级精品| 亚洲国产精品一区二区九九| 久久精品亚洲一区二区三区浴池| 精品性影院一区二区三区内射| 91精品国产福利在线观看麻豆 | 无码国内精品久久人妻麻豆按摩 | 久久久不卡国产精品一区二区| 久久精品无码av| 亚洲精品在线观看视频| 精品一区二区三区中文字幕| 国产精品亚洲精品| 91精品成人免费国产片| 精品国产一区二区三区不卡| 少妇亚洲免费精品| 国产精品v欧美精品v日本精| 午夜精品久久久久久| 99久久精品久久久久久清纯| 亚洲国产精品尤物yw在线| 成人精品视频成人影院| 2021精品国产综合久久| 国产精品爱搞视频网站| 国产精品国产精品国产专区不卡| 久热这里只有精品12| 欧美视频精品一区二区三区| 久久精品国产第一区二区| 日本久久久精品中文字幕| 国产精品亚洲成在人线| 91精品啪在线观看国产电影| 2021久久精品国产99国产精品| 精品少妇人妻av无码久久| 麻豆成人久久精品二区三区免费| 亚洲av无码国产精品夜色午夜| 鲸鱼传媒绿头鱼实验室之炮机测评日韩精品一级毛 | 精品午夜久久福利大片| 99精品国产丝袜在线拍国语| 久久99热只有频精品8| 一本大道无码日韩精品影视| 91精品啪在线观看国产|