txt 文本转图片,txt文本缩略图

Android 同时被 2 个专栏收录
32 篇文章 0 订阅
3 篇文章 0 订阅

一、目的

之前一篇文章说了从视频中截取一帧,这样的方案可以用作视频缩略图的方案 点击打开(视频取帧)。后来想到其他文件类型是否也可以做成缩略图的方式供用户预览,比如txt、doc、excel、ppt、pdf这些文件类型怎么转换成图片呢?
 
 

二、过程

搜索了一番,无果。android没有提供相应的API来直接处理这个情况,但是有个方案是,使用webView加载文件,然后保存webview,最后转换为图片,这个方案以后再来探索。
现在我们来说一个txt文件转为图片的情况。txt文件类型是上述几个文件类型中唯一纯文本的文件类型,既然是纯文本的话,我们就可以直接读取文件内容,绘制到画板Canvas中,然后再转换为图片。
 
因为我们要将这个文本内容展示出来,就要先获取到文本内容,而且还要保留文本格式,不然原本格式丢失,内容展示会很糟糕甚至会看的人产生歧义。
 
我们创建一个类来保存文本内容以及文本格式,文本格式无非就是记下文本的几行几列,绘制时候就利用行列数来确定图片的宽和高:
 
public class TextProperty {
    private int rows; //读入文本的行数
    private int lines = 0; //读入文本的列数
    SparseArray<String> context = new SparseArray<String>();

    public TextProperty(InputStreamReader in) throws Exception {
        int i = 0;
        BufferedReader br = new BufferedReader(in);
        String s;
        while ((s = br.readLine()) != null) {
            context.put(i++, s);
            this.lines = s.length() > lines ? s.length() : lines;
        }
        this.rows = i;
        in.close();
        br.close();

    }

    public int getHeigt() {
        return rows;
    }

    public SparseArray<String> getContext() {
        return context;
    }

    public int getWidth() {
        return this.lines;
    }
}

TextProperty 这个类很简单,就不多解释了。接下来看看怎么去绘制了。
private void getBitmapsFromText() {
        int x = 5, y = 10;
        try {
            TextProperty tp = new TextProperty(new InputStreamReader(getResources().getAssets().open("1.txt")));
            Bitmap bitmap = Bitmap.createBitmap(20*tp.getWidth(), 20 * tp.getHeigt(), Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            canvas.drawColor(Color.WHITE);
            Paint paint = new Paint();
            SparseArray<String> ss = tp.getContext();
            for (int i = 0; i < tp.getHeigt(); i++) {
                if (ss.get(i) != null) {
                    canvas.drawText(ss.get(i), x, y, paint);
                    y = y + 20;
                }
            }

            canvas.save(Canvas.ALL_SAVE_FLAG);
            canvas.restore();
            String path = Environment.getExternalStorageDirectory() + "/image.png";
            FileOutputStream os = new FileOutputStream(new File(path));
            bitmap.compress(Bitmap.CompressFormat.JPEG, 80, os);
            os.flush();
            os.close();
        } catch (Exception e) {
            Log.i("clx", "getBitmapsFromText exception:" + e);

        }
    }

上面的操作是:
 
1.打开asset目录下的1.txt文件,以输入流的形式传入TextProperty ,由TextProperty 解析得到文本内容和格式;
2.根据TextProperty 解析获取到的格式,创建一个等宽高的BitMap,每一个字符的宽度设定为20;
3.将文件绘制到Bitmap上,需要以Bitmap为参数创建一个画板Canvas;
4.将绘制完成的Bitmap压缩成JPEG格式的图片,释放资源。
 
注意: canvas.drawColor(Color.WHITE);画板颜色会默认黑色,所以请在这个设置背景颜色。
 
 

三、结束语

1.txt文本转换为图片时只需要拿到文本内容和格式,这里面没有提到编码的问题,如果投入使用的话需要注意;
 
2.其他的文件类型的文件怎么转换,暂时没有找到Android提供的API帮助。像PDF类型的文件,是由文字和图片组成的,在转换操作上也不是不可行,要解决的问题是从文件流中分析哪部分是文字以及那部分是图片,这个的话pdf转换为图片也是可行的。
3.excel类型文件可以使用jxl.jar作为辅助,先读取出来内容,然后自己绘制空格并填充内容,这个估计操作有些复杂。
 
如果大家有这方面的知识,欢迎分享下。
 
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

费费德勒

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值