java如何做出心形图案?

阳光 2021-03-30 14:04:08 java常见问答 5253

java应用的领域是很多的,可以用于开发网页,开发微信小程序,也可以利用java表白,比如做个心形图案,那java如何做出心形图案?接下来我们用相关实例给大家介绍一下java做心形图案的方法!

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.299 f * r + 0.578 f * g + 0.114 f * 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++)
        {
            < p = "" >
                for (int j = 0; j < image.getwidth(); j++)
                {
                    < p = "" >
                        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;
    }
}

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

java如何做出心形图案?.png

怎么样?有没有觉得很神奇!只要按照以上的方法去做就可以做出心形图案啦,大家看着是不是很心动,如果你心动的话,赶紧去试试吧!最后大家如果想要了解更多java实例知识,敬请关注奇Q工具网。

推荐阅读:

java下拉框怎么做?java下拉列表怎么设置?

eclipse怎么设置中文?eclipse有哪些插件?

java如何运行步骤jdk?jdk配置步骤是什么?