0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于图片压缩的idea插件

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-09 15:06 次阅读

今天主要是想给大家介绍最近自己开发的图片压缩插件,该插件用到了 tinypng 的在线服务。大家可能都知道,tinypng提供的图片压缩服务特别好用,压缩比例非常大,但是对图片质量影响比较小。

上次已经教大家怎么使用开发了,这次创建项目之类的流程不再赘述。直接来看看代码就好了。

项目依赖

在这里我们需要添加 tinypng 的 API 依赖

implementation("com.tinify:tinify:latest.release")

核心实现

在这个 idea 插件项目中,指北君这边提供了一个 dialog 的方式来展示,这一部分指北君通过 Java Swing 的方式来展现。以前听到swing 总感觉头大,感觉很复杂,但是在实际开发过程中,idea 在 Java Swing 的开发上,做了很大的改进。全程可以靠UI设计器搞定, 出来的UI也是挺好看的。

图片

Jetbrains 在Java UI 开发上真的下了不少的功夫。通过 GridLayout 进行布局,全程拖控件, 有种回到当年做 .net winform 开发的感觉。

项目是通过 kotlin 进行开发的,涉及到了kotlin的一些函数扩展方法等特性。对于Java 的朋友可能有一些不太适应,但是看懂不难哦。

AnAction

在idea中每一个操作都是一个AnAction 对象,所以我们这里也需要创建我们自己的AnAction.

class ImageCompressionAction : AnAction() {

    override fun actionPerformed(e: AnActionEvent) {
        checkApiKeyFile(notExistAction = {
            popupInputKeyDialog(event = e)
        }, existAction = { apiKey - >
            setTinyPNGApiKey(apiKey)
            popupCompressDialog(event = e)
        })
    }

    private fun popupInputKeyDialog(event: AnActionEvent?) {
        InputKeyDialog(object : InputKeyDialog.DialogCallback {
            override fun onOkBtnClicked(tinyPngKey: String) = checkApiKeyValid(project = getEventProject(event), apiKey = tinyPngKey, validAction = {
                updateExpireApiKey(apiKey = tinyPngKey)
                popupCompressDialog(event)
            }, invalidAction = {
                popupInputKeyDialog(event)
            })
            override fun onCancelBtnClicked() {
                TODO("Not yet implemented")
            }

        }).show()
    }

    private fun popupCompressDialog(event: AnActionEvent?) {
        ImageCompressionDialog(object : DialogCallback {
            override fun onOkClicked(model: ImageCompressionModel) {
                val inputFiles = readInputDirFiles(model.inputDir)
                val startTime = System.currentTimeMillis()
                compressImage(
                    project = getEventProject(event),
                    inputFiles = inputFiles,
                    model = model,
                    successAction = {
                        Messages.showWarningDialog(
                            "压缩完成, 已压缩: ${inputFiles.size}张图片, 压缩总时长共计: ${(System.currentTimeMillis() - startTime) / 1000}s",
                            "提示"
                        )
                    },
                    failAction = {
                        popupInputKeyDialog(event = event)
                    })
            }

            override fun onCancelClicked() {
                TODO("Not yet implemented")
            }

        }).show()
    }
}

在这个AnAction 中我们主要做了以下几件事情:

  • 检查 tinypng api key 是否有效
  • 检查 弹出图片压缩界面
  • 填充图片压缩界面的历史数据

前端界面

主要有两个界面,一个是输入APIKey的界面,另外一个是选择图片路径进行压缩的界面。

1、API Key 输入界面,这个界面做的比较简单,只是简单的输入 TinyPng 网站申请过来的 key ,对key 进行保存。

图片

2、 选择图片路径的界面, 选择图片的源目录,和输出目录, 并且可以设置输出文件的前缀名。

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2960

    浏览量

    104587
  • API
    API
    +关注

    关注

    2

    文章

    1489

    浏览量

    61854
  • 压缩
    +关注

    关注

    2

    文章

    102

    浏览量

    19368
  • 插件
    +关注

    关注

    0

    文章

    323

    浏览量

    22415
  • idea
    +关注

    关注

    1

    文章

    68

    浏览量

    4253
收藏 人收藏

    评论

    相关推荐

    IDEA插件MyBatisCodeHelperPro 21版本介绍

    开发了两年多的 IDEA插件 MyBatisCodeHelperPro 21 版本发布
    发表于 07-12 17:07

    IDEA EasyCode插件怎么使用

    目录1、前言2、安装(EasyCode)3、建立数据库4、在IDEA配置连接数据库5、开始生成代码6、pom.xml7、Application.yml8、启动项目来源:jianshu.c...
    发表于 12-08 07:17

    基于VP8编码的Webp图片压缩格式研究

    通过研究发现Webp格式图片压缩质量略低于JPEG格式图片,可能是由于没有成熟的编解码器的原因。
    发表于 03-23 10:30 3367次阅读
    基于VP8编码的Webp<b class='flag-5'>图片</b><b class='flag-5'>压缩</b>格式研究

    C#教程之压缩图片

    C#教程之压缩图片,很好的C#资料,快来学习吧。
    发表于 04-20 11:13 3次下载

    电脑上的图片怎么批量压缩

        对电脑上的文件我们都会定期的清理,相信大家也发现了在整理图片文件时总是会用到压缩,我们电脑上都会保存着各式各样的图片,单项的压缩图片很浪费时间,那么怎样
    发表于 09-21 17:59 623次阅读

    compileflow-idea-designer compileflow引擎的Idea插件

    ./oschina_soft/compileflow-idea-designer.zip
    发表于 05-18 14:18 2次下载
    compileflow-<b class='flag-5'>idea</b>-designer compileflow引擎的<b class='flag-5'>Idea</b><b class='flag-5'>插件</b>

    MrtfGitFlow4Idea分支管理插件

    ./oschina_soft/mrtf-git-flow-4idea.zip
    发表于 05-18 14:17 1次下载
    MrtfGitFlow4<b class='flag-5'>Idea</b>分支管理<b class='flag-5'>插件</b>

    Idea Javadocs2 IntelliJ IDEA插件

    ./oschina_soft/idea-javadocs2.zip
    发表于 05-18 14:13 1次下载
    <b class='flag-5'>Idea</b> Javadocs2 IntelliJ <b class='flag-5'>IDEA</b><b class='flag-5'>插件</b>

    ADB IDEA Android Studio和IDEA的安卓开发插件

    ./oschina_soft/adb-idea.zip
    发表于 05-18 11:44 3次下载
    ADB <b class='flag-5'>IDEA</b> Android Studio和<b class='flag-5'>IDEA</b>的安卓开发<b class='flag-5'>插件</b>

    idea-mini-ibatis iBatis/MyBatis插件

    ./oschina_soft/idea-mini-ibatis.zip
    发表于 05-18 11:38 1次下载
    <b class='flag-5'>idea</b>-mini-ibatis iBatis/MyBatis<b class='flag-5'>插件</b>

    Intellij IDEA插件idea-plugin-protobuf

    ./oschina_soft/idea-plugin-protobuf.zip
    发表于 05-18 11:09 2次下载
    Intellij <b class='flag-5'>IDEA</b><b class='flag-5'>插件</b><b class='flag-5'>idea</b>-plugin-protobuf

    idea-gitignore IDE .ignore插件

    ./oschina_soft/idea-gitignore.zip
    发表于 06-10 09:12 1次下载
    <b class='flag-5'>idea</b>-gitignore IDE .ignore<b class='flag-5'>插件</b>

    史上最全的图片压缩方法总结

    最近在研究图片压缩原理,看了大量资料,从上层尺寸压缩、质量压缩原理到下层的哈夫曼压缩,走成华大道,然后去二仙桥,全看了个遍,今天就来总结总结
    的头像 发表于 07-30 14:46 4478次阅读

    IDEA接口测试神器Apipost Helper 2.0简介

    最近注意到Apipost IDEA插件 2.0版本已上架至IDEA插件商店并与1.0版本互相独立存在,大家安装时可留意Apipost Helper 2.0,下面给大家分享一下新增功能。
    的头像 发表于 09-21 14:57 2022次阅读
    <b class='flag-5'>IDEA</b>接口测试神器Apipost Helper 2.0简介

    介绍一款IDEA插件:Apipost-Helper-2.0

    IDEA是一款功能强大的集成开发环境(IDE)插件,它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。
    的头像 发表于 12-06 10:47 752次阅读
    介绍一款<b class='flag-5'>IDEA</b><b class='flag-5'>插件</b>:Apipost-Helper-2.0