idea如何自制插件_Lice IntelliJ插件图标制作过程

本文介绍了作者在没有Photoshop的情况下,如何通过在线SVG编辑器、Kotlin代码以及手动编辑PNG,一步步制作高清的IntelliJ IDEA Lice插件图标的过程,包括遇到的问题及解决方案。
摘要由CSDN通过智能技术生成

这是只属于没有Photoshop的人的悲哀。

首先先大吼一声——劳资终于做出了高清无码的Lice图标!

直接进入正题

其实我还是想说一下事情的发展过程的——

我想照着IntelliJ IDEA的图标风格做一个Lice插件的文件图标,于是就先各种找图标源。

本来可以去翻IntelliJ Community源码,后来直接在IntelliJ安装目录找到了这个文件。在:

安装目录/lib/icons.jar

里面,打开它,寻找fileTypes目录,里面有几乎所有文件格式对应的图标。JB为每种文件提供了四个图标文件——16 x 16 png

16 x 16 svg

32 x 32 png

32 x 32 svg

其中,我个人认为有用的,只有第零个。因为我运行插件之后,发现IntelliJ不会自动缩放文件图标(一开始我整了个长宽都是几百像素的图片,吓尿了,效果你们可以自己看,我就懒得复现再截图了)

所以现在可以进入正题了

为了保证清晰度,我找到了CSS文件对应的图标:

然后将它拖到一个在线SVG编辑器里面,开始魔改。中途花费了两个小时左右(我简直想死的心都有了,终于体会到SuperSodaSea做像素画的辛苦了), 然后撸出了一个能看的svg图标。这个图标放在插件仓库里面,由于目前插件还不能见人,感兴趣的就自己去翻我commit记录找,不是特别感兴趣的就先别忙看吧。

我将它转成PNG之后发现,尼玛这就是AV画质嘛。。啥都看不清楚啊!

我当时的内心就是崩溃的,做了这么久的SVG(为什么花了那么久?因为调整透明度啊 颜色啊 字体啊 文字位置啊 改完了还得导出SVG,编辑一下XML,来手动控制一下那些元素的位置),居然没·有·用!

不要气馁,我们换个方法搞定它——做个PNG吧。于是我开始手动编辑PNG,过程极其痛苦。因为找不到可以进行像素级编辑的编辑器(真是太痛苦了),唯一一个可以进行像素级编辑的Windows自带的画图工具不支持透明度。

于是我回到了当年撸图的流水线——画图撸原型,然后光影魔术手进行透明度调整。然后整了半天,终于整出了这个效果:

我满心欢喜地打开IntelliJ IDEA插件工程,把文件拷过去,然后我看到了这一幕:

我突然发现,原版图标每个像素都是有一定透明度的,而我只是粗暴地将空白部分做成了透明的,看对比:

你永远不懂我伤悲,像白天不懂夜的黑

然后我实在没办法了。

怎么办呢?

我苦苦思寻,渐渐地进入了回忆之中,脑中浮现出一个画面——当年我还是个小小少年,刚开始接触Kotlin,拿着Swing的图形API把玩。

!!!!!!!!!!

我可以使用Kotlin代码操作png图片的每一个像素,反正都是RGB值,这多简单啊!

然后我就撸了个Kotlin程序,想起了当年写位运算程序的辛酸日子:

fun main(args: Array) {

val origin = ImageIO.read(File("lice.png"))

(0..origin.width - 1).forEach { x ->

(0..origin.height - 1).forEach { y ->

val o = origin.getRGB(x, y)

origin.setRGB(x, y, o + (0x22 shl 24))

}

}

ImageIO.write(origin, "PNG", File("lice-edited.png"))

}

希望它能带来改变。

然后编辑之后导出了一张几乎是透明的图片。。。。

这就很尴尬了,这也不是我想要的啊,我只是想要一张高仿的png图片啊!

我此时智商上线,灵光再一次闪现!

我发现这样不行,无论怎样硬编码RBGA的A值,都是不靠谱的。

既然是高仿,那就应该拿出高仿的样子!

我拿出了IntelliJ自带的CSS图片的png文件,直接将它的RGBA值抄过去。然后发现原版图标写了CSS字样的部分,每个像素的透明度都不一样。

于是我就只能“只抄没字样的部分,字样直接采用彩色背景的透明度”。你永远不懂我伤悲,像白天不懂夜的黑

最后版本:

fun main(args: Array) {

val origin = ImageIO.read(File("lice.png"))

val css = ImageIO.read(File("css.png"))

val alphaPosition = 0xFF shl 24

val bottomAlpha = css.getRGB(css.width - 1, css.height - 1) and alphaPosition

(0..origin.width - 1).forEach { x ->

(0..origin.height - 1).forEach { y ->

val o = origin.getRGB(x, y)

origin.setRGB(x, y,

if (y <= 9 || x < 1) o + (css.getRGB(x, y) and alphaPosition)

else o + bottomAlpha

)

}

}

ImageIO.write(origin, "PNG", File("lice-edited.png"))

}

导出之后感觉效果还不错:

累死我了 QwQ

明天还要上课背单词….睡觉睡觉。

(发之前画十字,求不要吞图片(给湛湛 dram和果冻发了预览邀请(跪求知乎不要吞我图片(他们收到邀请了(知乎食我大雕(垃圾(根据我对知乎编辑器行为的观察(知乎编辑器题图应该是只支持png格式的解码(因为,我上传了jpg编码的以png为扩展名的图片和jpg图片,都GG了,上传直接失败(只有QQ截图直接保存为PNG的图片是可以上传的(辣鸡知乎)))))))))))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值