当前位置 博文首页 > zcrazy的博客:用java代码让“小姐姐” 们 为你怦然心动!

    zcrazy的博客:用java代码让“小姐姐” 们 为你怦然心动!

    作者:[db:作者] 时间:2021-06-02 20:52

    一年一度的情人节即将来临,你可以单身,但是你必须要付出行动,让你周围的小姐姐怦然心动,为了不影响正常工作,那就在编辑器的输出窗口动点手脚吧。不知道你是不是见过下面这样的情况!

    ?

    如何让上面这个**的spring图标按我们的想法改变,比如变成下面这样

    让我来一步一步,手把手的交给大家(注意重点是手把手)。

    ?

    ?

    1.改变Spring启动时候的图标

    这一步太简单了,就是在Spring项目下的resources文件夹下加一个banner.txt即可。

    这个时候你可以创建完了文件之后,随便加一些符号尝试一下即可。

    ?

    ?

    2.自定义图案

    既然知道怎么在启动的时候修改图案了,图案总不能自己画吧(当然自己画也行,只能说是走心了),可以找到一个心仪的图片,然后通过下方程序自动生成符号图案(以下代码改编自网络,自己增加了点功能,修改了点内容,虽然已经面目全非,但是想法毕竟是人家的,这个想法很重要的,想要脱单,想法依旧重要)。

    import javax.imageio.ImageIO;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    public class AscPic {
        public static void main(String[] args) throws IOException {
            String path = "d:/heart3.jpg";//导入的图片
            String base = "love";//将会用这个字符串里的字符填充图片
            BufferedImage image = ImageIO.read(new File(path));//读入图片,并用图片缓冲区对象来接收
            float scale = (float) 1;
            //获取缩放后的宽高
            int width = (int) (image.getWidth()*scale)*3;
            int height = (int) (image.getHeight()*scale);
            //调用缩放方法获取缩放后的图片
            Image img = image.getScaledInstance(width , height, Image.SCALE_DEFAULT);
            image = toBufferedImage(img);
            int[][] imageArray = new int[image.getHeight()][image.getWidth()];
            int[] sum = new int[image.getWidth()];
            int cnt = 0;
            //双层for循环,遍历图片
            for (int y = 0; y < image.getHeight(); y++) {//先竖向遍历,再横向遍历,即一行一行的找,后面也会一行一行的打印
                for (int x = 0; x < image.getWidth(); x++) {
                    int color = image.getRGB(x, y);//图片缓冲区自带的方法,可以得到当前点的颜色值,返回值是int类型
                    int r=(color>>16)&0xff;
                    int g=(color>>8)&0xff;
                    int b=color&0xff;
                    float gray = 0.299f * r + 0.578f * g + 0.114f * b;//灰度值计算公式,固定比例,无需理解
                    int index = Math.round(gray * (base.length()) / 255);
                    if(index>=base.length()) {
                        imageArray[y][x] = -1;
                    }else {
                        imageArray[y][x] = cnt++;
                        sum[x]+=index;
                    }
                }
            }
            for(int i = 0;i<image.getHeight();i++){
                for(int j = 0;j<image.getWidth();j++){
                    if(sum[j]==0) continue;
                    else if(imageArray[i][j]==-1)
                        System.out.print(" ");//白色的地方打空格,相当于白色背景,这样图片轮廓比较明显
                    else
                        System.out.print(base.charAt(imageArray[i][j]%base.length()));//有颜色的地方打字符
                }
                System.out.println();//一行打完,换行
            }
        }
        public static BufferedImage toBufferedImage(Image image) {
            if (image instanceof BufferedImage) {
                return (BufferedImage) image;
            }
            image = new ImageIcon(image).getImage();
            boolean hasAlpha = false;
            BufferedImage bimage = null;
            GraphicsEnvironment ge = GraphicsEnvironment
                    .getLocalGraphicsEnvironment();
            try {
                int transparency = Transparency.OPAQUE;
                if (hasAlpha) {
                    transparency = Transparency.BITMASK;
                }
                GraphicsDevice gs = ge.getDefaultScreenDevice();
                GraphicsConfiguration gc = gs.getDefaultConfiguration();
                bimage = gc.createCompatibleImage(image.getWidth(null), image
                        .getHeight(null), transparency);
            } catch (HeadlessException e) {
            }
            if (bimage == null) {
                int type = BufferedImage.TYPE_INT_RGB;
                if (hasAlpha) {
                    type = BufferedImage.TYPE_INT_ARGB;
                }
                bimage = new BufferedImage(image.getWidth(null), image
                        .getHeight(null), type);
            }
            Graphics g = bimage.createGraphics();
            g.drawImage(image, 0, 0, null);
            g.dispose();
            return bimage;
        }
    }

    ?

    图案自己找,最好是白色背景,可以突出中心图案的,比如:

    通过运行上面的代码+这个简单的图案,可以生成一个灰白色的比心图案,如下所示

    然后将这个复制到banner.txt文件夹下即可(上图为成图,不要在意里面的细节)。

    ?

    ?

    3.加上颜色,加点想法

    既然是为了让小姐姐们怦然心动的,黑白色的怎么能行,必须上点颜色啊。

    这就需要在banner.txt中加入一些个语句了,特别简单,如下所示:

    ${AnsiColor.BRIGHT_RED}
             lovelo                                                                     
             velovelovelo   velovelovelo                                                                  
          velovelovelovelovelovelovelovelov                                                               
          elovelovelovelovelovelovelovelove                                                               
          lovelovelovelovelovelovelovelovel                                                               
          ovelovelovelovelovelovelovelovelo                                                               
             velovelovelovelovelovelovel                                                                  
                ovelovelovelovelovelovel                                                                  
                   ovelovelovelove                                                                        
                    lovelo                  ${AnsiColor.BRIGHT_YELLOW}
                                      youyouyouyouyou                                          
                   youyou                     youyouyou      youyou                                       
                youyouyouyouyou            youyou               you                                       
             youyou      youyouyou      youyou                  youyou                                    
          youyou            youyouyouyouyouyou                  youyou                                    
          youyou      youyou   youyouyouyou                     you                                       
          youyou         you   youyouyou                     youyou                                       
          youyou   you   youyouyouyou                     youyou                                          
             youyouyouyouyouyouyouyou                     youyou                                          
             youyouyouyouyouyouyou                     youyou                                             
             youyouyouyouyouyou                        you                                                
                youyouyouyouyou                     youyou                                                
                youyouyouyou                     youyouyouyou                                             
                   youyouyou                  youyouyouyouyouyouyou                                       
                   youyou                     youyou            youyou

    最主要的就是${AnsiColor.BRIGHT_YELLOW},这里的YELLOW可以换成任意颜色。

    我在做的时候,旁边的小姐姐给我提了一个想法,心用love,手用you,于是我就用love生成了一遍,只取上面的心,然后又用you生成了一遍只要下面的手。

    既然要引起小姐姐们的注意,不用心怎么行。

    这就成了如下的最终效果

    ?

    4.结尾

    最后迫不及待的传到我们项目的Git上去了,而且每个小姐姐都收到了,不过效果并没有达到,不仅没有怦然心动,还被说成“渣”,还还还还被领导批评是不是太闲了,我说我参加CSDN活动,领导听完我的原因表示很支持。

    就写到这吧,我在去加班了...

    最后祝大家情人节快乐~

    ?

    参考文章:

    https://blog.csdn.net/qq_32786873/article/details/78202465

    https://blog.csdn.net/tonyxiaowai/article/details/92798395

    https://www.pianshen.com/article/6567611072/

    https://blog.csdn.net/kingxie403/article/details/8561962

    ?

    ?