(超简单)将图片转换为ASCII字符图像

将一张图片转换为ASCII字符图像
原图:
在这里插入图片描述
效果图:
在这里插入图片描述

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class ImageToASCII {

    /**
     * 将图片转换为ASCII艺术字符图像
     *
     * @param imgPath 图片路径(包括图片名)
     * @param outPath 生成的文本路径(包括文件名)
     */
    public static void imageToASCII(String imgPath, String outPath) {
        // 表示不同灰度级别的ASCII字符
        final String base = "MNHQ&OC?7>!;:-.";
        StringBuffer result = new StringBuffer("");
        try {
            long start = System.currentTimeMillis();
            System.out.println("开始执行:");
            BufferedImage bufferedImage = ImageIO.read(new File(imgPath));
            // 使用嵌套的循环遍历图像的像素,每次处理一个区块(36 x 9像素)当前为 i=3 x j=2。
            for (int i = 0; i < bufferedImage.getHeight(); i += 3) {
                for (int j = 0; j < bufferedImage.getWidth(); j += 2) {
                    int pixel = bufferedImage.getRGB(j, i); // 下面三行代码将一个数字转换为RGB数字
                    int red = (pixel & 0xff0000) >> 16;
                    int green = (pixel & 0xff00) >> 8;
                    int blue = (pixel & 0xff);
                    float gray = 0.299f * red + 0.578f * green + 0.114f * blue;
                    int index = Math.round(gray * (base.length() + 1) / 255);
                    result.append(index >= base.length() ? " " : String.valueOf(base.charAt(index)));
                }
                result.append("\r\n");
            }
            FileWriter fileWriter = new FileWriter(outPath);
            fileWriter.write(result.toString());
            fileWriter.flush();
            fileWriter.close();
            long end = System.currentTimeMillis();
            System.out.println("执行结束:共执行 " + (end - start) + "毫秒");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        imageToASCII("E:\\images\\水娃.jpg", "E:\\images\\222.txt");
    }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
图片转换字符画是一种将图片中的像素点映射为对应的字符的过程。通过使用不同的字符代替不同灰度级别的像素,可以在文本环境中显示出图像的近似效果。这种技术可以通过许多方式实现,包括使用程序编写的算法和在线字符画生成器。 生成字符画的过程通常包括以下几个步骤:首先,将原始图片转换为灰度图像,即使得每个像素点只有一个灰度值(黑白照片)。其次,将灰度图像中的像素值映射到一组字符中,例如使用ASCII码中的字符集。不同的灰度级别对应不同的字符。然后,将映射后的字符按照相应的排列方式,例如每行固定字符数或根据像素灰度级别进行排列,重新组织为文本文件。最后,将生成的文本文件输出显示,以呈现出与原始图像相似的字符画效果。 生成字符画的过程可以根据不同的需求和算法进行调整和优化。一些算法可以在转换过程中添加一些光影效果,以产生更真实的效果。此外,还可以通过改变字符的颜色或使用更多的字符集来增强字符画的细节和质量。 使用字符画的好处是可以在某些情况下以较小的文件大小传输和存储图像,也可以在文本环境中展示图像字符画也有一定的美学价值和情怀意义,成为一种独特的艺术形式。 总之,将图片转换字符画是一种将图像转换为文本形式的过程,可以通过一系列算法和字符映射方式来实现。这种技术可以在文本环境中显示图像的近似效果,有一定的实用性和美学价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值