首页 > 编程语言 >java 将jpg格式图片提出成txt文件 。

java 将jpg格式图片提出成txt文件 。

时间:2024-07-01 19:57:24浏览次数:17  
标签:txtPath imagePath java String int jpg static new txt


import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;

public class ImageConvertTool {
    private static String imagePath, txtPath;
    private static int imageHeight, imageWidth;
    private static String replaceString = 
    "$@B%8&WM#*oahkbmZO0QJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,^`'. ";
    private static StringBuffer imageString = new StringBuffer();

    public ImageConvertTool(String imagePath, String txtPath) {
        this.imagePath = imagePath;
        this.txtPath = txtPath;
        imageProcess();
        imageSave();
    }

    private static void imageProcess() {
        try {
            BufferedImage image = ImageIO.read(new File(imagePath));
            imageHeight = image.getHeight();
            imageWidth = image.getWidth();
            for (int height = 0; height < imageHeight; height += 2) {
                for (int width = 0; width < imageWidth; width++) {
                    // 像素点RBG值获取
                    int pixel = image.getRGB(width, height);
                    int R = (pixel & 0xff0000) >> 16;
                    int B = pixel & 0xff;
                    int G = (pixel & 0xff00) >> 8;

                    // 灰度计算公式
                    float pixelGray = 0.299f * R + 0.587f * G + 0.114f * B;
                    int pixelIndex = Math.round(pixelGray * (replaceString.length() + 1) / 255);

                    // 将灰度值转成字符
                    String pixelChar = pixelIndex >= replaceString.length() ? " "
                            : String.valueOf(replaceString.charAt(pixelIndex));

                    // 控制台上输出
                    System.out.print(pixelChar);

                    // 添加到imageString中
                    imageString.append(pixelChar);
                }
                System.out.println();
                imageString.append('\n');
            }
        } catch (IOException error) {
            error.printStackTrace();
        }
    }

    private static void imageSave() {
        File file = new File(txtPath);
        if (!file.exists())
            try {
                file.createNewFile();
            } catch (Exception error) {
                error.printStackTrace();
            }
        try {
            FileWriter fileWriter = new FileWriter(file);
            String temp = new String(imageString);
            fileWriter.write(temp);
            fileWriter.close();
        } catch (Exception error) {
            error.printStackTrace();
        }
    }
}
public class Main {
    public static void main(String []args){
        // 输入保存的txt文件路径
        String txtPath = "cat.txt";
        // 输入准备转换的图片路径
        String imagePath = "cat.jpg";
        new ImageConvertTool(imagePath,txtPath);
    }
}

标签:txtPath,imagePath,java,String,int,jpg,static,new,txt
From: https://blog.csdn.net/laocooon/article/details/140102955

相关文章

  • JavaScript 进阶之旅:Symbol 引领标识符新纪元
    个人主页:学习前端的小z个人专栏:JavaScript精粹本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论!文章目录......
  • [Javascript] garbage collection
    Anytimewhenyouhavenon-primitivetype,it'sgoingtoberemovedfrommemoryanytimeifitisnolongerneeded.classTest{constructor(name){this.name=name}}constgloablTest=newTest("globalTest")constglobalString=......
  • Java进阶学习|Day4.Java多线程,线程池
    文章目录了解多线程CPU进程(Process)线程多线程开发多线程优点实现方式继承Thread类实现Runnable接口实现Callable接口线程状态转换线程状态线程调度调整线程优先级线程睡眠线程等待线程让步线程加入线程唤醒线程同步线程同步方式多线程间通信线程池了解线程池定义......
  • Java中的反射
    1.什么是反射?反射是框架设计的灵魂。反射(Reflection)是Java的一种特性,它可以让程序在运行时获取自身的信息,并且动态地操作类或对象的属性、方法和构造器等。通过反射功能,可以让我们在不知道具体类名的情况下,依然能够实例化对象,调用方法以及设置属性。简单来说就是在类运行......
  • java中的函数式接口:(Consumer、BiConsumer、Supplier、Predicate、Function、BiFunctio
    Consumer说明:(1)consumer接口来自java8中引入的Java.util.function包(2)Consumer是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递一个参数执行指定的方法)。功能:Consumer的功能接口是一个接受单一参数并且不返回任何结果的操作。必要时,"结果"可以存在在集合......
  • Eclipse 创建 Java 包
    打开新建Java包向导你可以使用新建Java包向导来创建Java包。Java包向导打开方式有:通过点击"File"菜单并选择New>Package在PackageExplorer中通过右击鼠标选择>Package在工具条上点击包按钮( )如果你要创建子包,在打开创建Java包向导前选择好父包,这样在......
  • Eclipse 创建 Java 类
    打开新建Java类向导你可以使用新建Java类向导来创建Java类,可以通过以下途径打开Java类向导:点击"File"菜单并选择New>Class在PackageExplorer窗口中右击鼠标并选择New>Class点击类的下拉按钮()并选择( )在打开创建Java类向导前,最好选择好Java类......
  • Eclipse 创建 Java 接口
    打开新建Java接口向导新建Java接口向导可以创建新的Java接口。打开向导的方式有:点击File菜单并选择New>Interface在PackageExplorer窗口中右击鼠标并选择New>Interface在工具条上的下拉框按钮中()选择()在打开创建Java接口向导前,最好选择好Java接......
  • 华为OD机试D卷 --智能成绩表--24年OD统一考试(Java & JS & Python & C & C++)
    文章目录题目描述输入描述输出描述用例题目解析算法源码题目描述小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗?输入描述第1行输入两个整数,学生人数n和科目数量m。0<n<1000<m<10第2行输入m个科目名称,彼......
  • 华为OD机试D卷 --最富裕的小家庭--24年OD统一考试(Java & JS & Python & C & C++)
    文章目录题目描述输入描述输出描述用例题目解析算法源码题目描述在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。输入描述第一行为一......