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

一、目的

之前一篇文章说了从视频中截取一帧,这样的方案可以用作视频缩略图的方案 点击打开(视频取帧)。后来想到其他文件类型是否也可以做成缩略图的方式供用户预览,比如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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用HTML、CSS和JavaScript来实现鼠标悬停时显示对应图片的效果。 首先,在HTML中创建一个包含缩略文本图片的容器,如下所示: ```html <div class="thumbnail"> <p>缩略文本</p> <img src="#" alt="图片"> </div> ``` 然后,在CSS中设置容器的样式,如下所示: ```css .thumbnail { position: relative; width: 200px; height: 200px; } .thumbnail p { display: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; background-color: rgba(0, 0, 0, 0.7); color: #fff; padding: 10px; width: 80%; } .thumbnail img { width: 100%; height: 100%; object-fit: cover; } ``` 最后,使用JavaScript来实现鼠标悬停时显示和隐藏缩略文本的功能,如下所示: ```javascript const thumbnail = document.querySelector('.thumbnail'); const text = thumbnail.querySelector('p'); thumbnail.addEventListener('mouseover', () => { text.style.display = 'block'; }); thumbnail.addEventListener('mouseout', () => { text.style.display = 'none'; }); ``` 上述代码中,首先通过querySelector方法获取缩略容器和文本元素,然后使用事件监听器来监听鼠标悬停和离开事件,当鼠标悬停在容器上时,将文本元素的display属性设置为block,显示文本;当鼠标离开容器时,将文本元素的display属性设置为none,隐藏文本。 通过上述HTML、CSS和JavaScript代码,当鼠标悬停在缩略容器上时,对应的缩略文本会显示出来,同时显示对应的图片

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值