一、目的

之前一篇文章说了从视频中截取一帧,这样的方案可以用作视频缩略图的方案 点击打开(视频取帧)。后来想到其他文件类型是否也可以做成缩略图的方式供用户预览,比如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作为辅助,先读取出来内容,然后自己绘制空格并填充内容,这个估计操作有些复杂。
如果大家有这方面的知识,欢迎分享下。

txt 文本转图片,txt文本缩略图相关推荐

  1. android 带图片的弹幕,一个可以支持文本,图片,文本+表情的简单弹幕插件

    前言 最近因项目需要,使用canvas做了一个简单的弹幕插件,能满足基本功能, 后期还需要不断完善,有好的建议和想法欢迎提出. 为了做一个弹幕前期调研考察了颇久,首先列一下我需要的功能: 文字弹幕 新 ...

  2. 文本居于图片左侧html,CSS实现图片与文本的居中对齐的常见方式

    1.为图片和文本都设置vertical-align:middle !DOCTYPE html> Page Title .d1>* { vertical-align: middle; } 这 ...

  3. python 生成pdf 文字和图片_Python系列—PDF文本与图片抽取

    PDF是人们日常使用最多的跨平台文档.其是一种用独立于应用程序.硬件.操作系统的方式呈现文档的文件格式.每个PDF文件包含固定布局的平面文档的完整描述,包括文本.字形.图形及其他需要显示的信息.具有良 ...

  4. java word替换图片_Java Word中的文本、图片替换功能

    Word中的替换功能以查找指定文本然后替换为新的文本,可单个替换或全部替换.以下将要介绍的内容,除常见的以文本替换文本外,还将介绍使用不同对象进行替换的方法,具体可包括: 1. 指定字符串内容替换文本 ...

  5. Python处理数据,并经其存储为文本数据(Txt、JSON、CSV、Excel)总结

    处理文本数据(Txt.JSON.CSV.Excel) Txt文件存储 JSON文件存储 CSV文件存储 Excel文件存储 Txt文件存储 将数据保存为txt文件格式是最为简单的. with open ...

  6. c++清空一个txt文本_Linux下常用文本处理命令大全

    Linux中很多文本工具都使用到了正则表达式,正则表达式可以极大的简化linux系统管理工作,因为网上有很多正则相关的教程,所以这里不再讲述,我当时看的是菜鸟的正则表达式,看个一下午在实验几遍基本就会 ...

  7. Java追加文本内容到txt文件

      文本内容逐行写入到txt文件中: import java.io.RandomAccessFile;/*** 功能:将内容逐行写入到txt文件中* @param fileName 文件名(绝对路径) ...

  8. 多个txt文件合并成一个文本

    如何将多个txt文件合并成一个文本 (1)将多个txt文件放在一个文件夹下. (2)编写一个批处理文件,里面的命令为type *.txt >a.txt (3)执行该批处理文件,则所有txt文件合 ...

  9. 文本阅读器(txt reader) v0.3.1 linux bt

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

最新文章

  1. std::bind介绍
  2. python day two,while
  3. PostgreSQL 恢复模式错误日志增强 - 提供正在恢复的WAL(XLOG)文件位置
  4. java.lang.NoSuchMethodError
  5. Java面试基础篇——第九篇:BIO,NIO,AIO的区别
  6. 微信小程序 - 实现购物车结算
  7. Linux 对应ARP欺骗的一种被动方法[转]
  8. pwmc语言调速程序_51单片机的直流电机PWM调速系统设计,正转反转,加减速,急停等,仿真和代码...
  9. matlab大作业题题单,2011MATLAB大作业-题目-
  10. 【手把手教你树莓派3 (二)】 启动wifi模块
  11. C#接口的使用场合,接口应用
  12. Linux下安装Apache Maven安装
  13. jtemplates插件
  14. 面试题(4)--基础篇
  15. Linux常用命令汇总--tree
  16. MyBatis(四)------MyBatis的生命周期及配置实例
  17. 51单片机控制电机正反转
  18. 华为鸿蒙研发团队负责人,走进华为北研所:EMUI 11 背后的“人因研究”到底是什么?...
  19. 为什么那么多人考信息系统项目管理师?高项证书有什么作用?
  20. U盘被分区出EFI,格式化失败 win无法格式化

热门文章

  1. 关于如何解决农行网银在WIN7下使用不正常的方法
  2. linux下超好用的词典.(goldendict)
  3. 使用NetBeans 海康威视 SDK 二次开发
  4. Word文字如何竖向
  5. java 图片加白压缩_java图片添加水印和压缩
  6. snprintf 函数用法
  7. 小家电快充芯片,小家电type-C快充方案芯片 LDR6328S PD取电芯片
  8. 【兴趣】收集一些不玩后悔系列的单机游戏
  9. 【Linux基础】Linux下查看硬件配置
  10. APAP-基础知识(内表SORT的使用)