中易网

java文本文件转化为图片文件怎么弄?

答案:3  悬赏:60  
解决时间 2021-01-28 19:32
java文本文件转化为图片文件怎么弄?
最佳答案
文件在计算机中都是以二进制保存的,但系统是以文件头来区分各种文件格式的。
也就是说,仅仅更改后缀名是不行的。


按照你说想的,可以这么来做:
1、读取txt文本的每一行
2、创建BufferedImage图片,然后在图片上画读取到的文本


下面给出示例程序:


测试类 TextToImageExample.java
import java.io.File;
import java.util.Scanner;


public class TextToImageExample {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("输入TXT文本名称 (例如: D:/java.txt ):");
        String textFileName = in.nextLine();
        System.out.print("输入保存的图片名称 (例如: D:/java.jpg):");
        String imageFileName = in.nextLine();
        
        TextToImage convert = new TextToImage(new File(textFileName), new File(imageFileName));
        boolean success = convert.convert();
        System.out.println("文本转图片:" + (success ? "成功" : "失败"));
    }
}

文本转图片类 TextToImage.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;


public class TextToImage {
    
    private File textFile;
    
    private File imageFile;
    
    
    private BufferedImage image;
    
    private final int IMAGE_WIDTH = 400;
    
    private final int IMAGE_HEIGHT = 600;
    
    private final int IMAGE_TYPE = BufferedImage.TYPE_INT_RGB;
    
    
    public TextToImage(File textFile,File imageFile){
        this.textFile = textFile;
        this.imageFile = imageFile;
        this.image = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT, IMAGE_TYPE);
    }
    
    
    public boolean convert() {
        
        //读取文本文件
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(textFile));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        }
        
        //获取图像上下文
        Graphics g = createGraphics(image);
        String line;
        //图片中文本行高
        final int Y_LINEHEIGHT = 15;
        int lineNum = 1;
        try {
            while((line = reader.readLine()) != null){
                g.drawString(line, 0, lineNum * Y_LINEHEIGHT);
                lineNum++;
            }
            g.dispose();
            
            //保存为jpg图片
            FileOutputStream fos = new FileOutputStream(imageFile);
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
            encoder.encode(image);
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
    
    
    private Graphics createGraphics(BufferedImage image){
        Graphics g = image.createGraphics();
        g.setColor(Color.WHITE); //设置背景色
        g.fillRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);//绘制背景
        g.setColor(Color.BLACK); //设置前景色
        g.setFont(new Font("微软雅黑", Font.PLAIN, 12)); //设置字体
        return g;
    }
    

}特别注意:程序中使用到了com.sun.image.codec.jpeg.JPEGImageEncoder和 com.sun.image.codec.jpeg.JPEGCodec ,这 两个是sun的专用API,Eclipse会报错。


解决办法:
Eclipse软件,Windows->Preferences->Java->Complicer->Errors/Warnings,Deprecated and restricted API->Forbidden reference 改为 Warnning。
如果还是报错,在工程上build path,先移除JRE System Library,然后再添加JRE System Library。


追问:我用的是JCreator啊!出现了JPEGImageEncoder的相关错误,我该怎么弄?drawString时哪个类的方法。
追答:drawString是Graphics的方法。
JCreator没有用过,无法解答。
全部回答
你的做法跟把图片打压缩包解压时扩展名改成txt是一样的
图片,存贮的是点阵,是每一个点的颜色值。一个点用一个或几个字节存储(看颜色的精度)
文本文件存贮的是ASCII码,一般一个英文或数字使用一个字节存储。一个中文用两个字节存储。
两者的存储方式完全不同,当然无法用了。
此外,jpg是压缩的图片格式,需要把原图用压缩算法再算一遍,产生的数据保存起来。这比纯图片还要难以解析。所以绝对不是改改名字就可以的。
追问:那要怎么做才可以呢?纯图的格式是什么格式?刚刚我又做了一个实验。把图片转成文本(用java的文件流做的)。当然文本都是文字和符号而且没规律。我又把文本文件已流的方式读入另写成jpg格式(之前的图片格式)是可以得到原来的图片的。但我在乱码中加入了一段文本,比如作文。再转成jpg格式的时候,说windows编辑器不支持此格式。到底能不能做呢?
追答:你的测试等于把jpg文件改名成txt,再改回来,当然可以看到。如果你修改了,肯定就不行了。
如果你要把文字转图片。需要用swing或awt或swt开个图片框,用图片上写字的方式把文字写到图片上(要设定字体,大小,位置,颜色等等),再把图片框另存为bmp,再把bmp转为jpg。bmp转jpg应该是有外部代码的,如果不转,bmp也是可用的图片格式。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么鸿鹄论坛不能下载视频了
DO是什么游戏
集成显卡是a卡吗??
龙文区财政局地址在什么地方,我要处理点事
你好,我朋友也是公司涉嫌诈骗,但是她刚去8
鹤壁的老乡我家住房面积79平方今年要交多少钱
在○里填上合适的运算符号,在□里填上适当的
西园寺世界到底怀没怀伊藤诚的孩子?
草原上的牧民为了增加收入,饲养的牛羊的数量
求《乾隆大帝》里的电视配乐各种插曲
与when中的wh发同音的单词有哪些
源源旅馆(唐山滦县)地址好找么,我有些事要过
施工方临建工资属于什么科目
巴氏灭菌器煮的牛奶和自己用锅烧的有什么不同
微信里面添加到表情里面的图片如何删掉?
推荐资讯
61除以7竖式怎么写???????
杰克迈克逊长像的有点恐怖
2o号钢和不锈钢材质区别
木酒柜贴什么颜色贴纸好看?
唯姿美甲美睫工作室地址有知道的么?有点事想
新生女大学生所需物品
猜谜语及脑筋急转弯
工装效果图的常见问题
什么野生的动物喜欢破坏玉米地,而且只能长三
加油站(801县道)地址好找么,我有些事要过去
申通快递广州白云区到广州开发区多少天
DOTA大炮可以和恩赐解脱重合
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?