效果图

我们先来看看效果图,可以看到下图由各种颜色的”美”字拼接而成,形成了一张不一样的图片。

原理

生成这种图片的原理很简单,但是当时看开源项目时愣是看不懂,因为没学过Python,但是仔细研究,终于能慢慢的理解该开源项目源码,并把它改写成Android平台的源代码。下面把这个算法的主要内容讲给大家,该算法大致原理如下:
1.根据原图片的大小和字体的大小创建一张空白图片
2.把原图片按字体的大小分成若干块,取每一块的像素的颜色的平均值
3.将指定文本以得到的平均颜色画在新建的空白图上

package com.luoye.fpic.util;import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;public class Utils {/*** 核心,文本转成图片* @param bitmap 原图片* @param text 文本* @param fontSize 文字大小* @return 转好的图片*/public static Bitmap getTextBitmap(Bitmap bitmap, String text, int fontSize){if(bitmap==null)throw  new IllegalArgumentException("Bitmap cannot be null.");int picWidth=bitmap.getWidth();int picHeight=bitmap.getHeight();Bitmap back= Bitmap.createBitmap((bitmap.getWidth()%fontSize==0)?bitmap.getWidth():((bitmap.getWidth()/fontSize+1)*fontSize),(bitmap.getHeight()%fontSize==0)?bitmap.getHeight():((bitmap.getHeight()/fontSize+1)*fontSize), Bitmap.Config.ARGB_8888);Canvas canvas=new Canvas(back);canvas.drawColor(0xfff);int idx=0;for(int y=0;y<picHeight;y+=fontSize){for(int x=0;x<picWidth;x+=fontSize){int[] colors=getPixels(bitmap,x,y,fontSize,fontSize );Paint paint=new Paint();paint.setAntiAlias(true);paint.setColor(getAverage(colors));paint.setTextSize(fontSize);Paint.FontMetrics fontMetrics =paint.getFontMetrics();float padding=(y==0)?(fontSize+fontMetrics.ascent):((fontSize+fontMetrics.ascent)*2);canvas.drawText(String.valueOf(text.charAt(idx++)),x,y-padding,paint);if(idx==text.length()){idx=0;}}}return back;}/*** 获取某一块的所有像素的颜色* @param bitmap* @param x* @param y* @param w* @param h* @return 颜色数组*/private static int[] getPixels(Bitmap bitmap,int x,int y,int w,int h){int[] colors=new int[w*h];int idx=0;for (int i=y;(i<h+y)&&(i<bitmap.getHeight());i++){for (int j=x;(j<w+x)&&(j<bitmap.getWidth());j++){int color=bitmap.getPixel(j,i);colors[idx++]=color;}}return colors;}/*** 求多个颜色的平均值* @param colors* @return 平均颜色*/private static   int getAverage (int[] colors){//int alpha=0;int red=0;int green=0;int blue=0;for(int color:colors){red += ((color&0xff0000)>>16);green += ((color&0xff00)>>8);blue += (color&0x0000ff);}float len=colors.length;//alpha=Math.round(alpha/len);red=Math.round(red/len);green=Math.round(green/len);blue=Math.round(blue/len);return Color.argb(0xff,red,green,blue);}private static  void log(String log){System.out.println("-------->Utils:"+log);}
}

相关链接

参考的开源项目:https://github.com/xlzd/img2html
完整的Android代码:https://github.com/luoyesiqiu/textImg

Android实现用文字生成图片相关推荐

  1. android 文字转化为图片格式,Android 文字生成图片

    一直在看别人写的文章,而自己却不敢执笔来写,一是怕写得不好,二是平时也不太有写文章的习惯,所以总感觉看别人写就好啦,但是最近工作遇到点问题,本以为很简单的,但是奈何解决起来还是比较麻烦的 把Andro ...

  2. android textView 替文字添加下划线 删除线

    android textView 替文字添加下划线 删除线 方法1: tv=(TextView)findViewById(R.id.tv); tv.getPaint().setFlags(Paint. ...

  3. android字体显示不全,android 按钮的文字显示不全

    android 按钮的文字显示不全 发布时间:2020-06-19 03:42:34 来源:51CTO 阅读:1424 作者:FergusJ AbsoluteLayout.LayoutParams l ...

  4. android动态设置文本居中显示图片,Android DrawableTextView图片文字居中显示实例

    在我们开发中,TextView设置Android:drawableLeft一定使用的非常多,但Drawable和Text同时居中显示可能不好控制,有没有好的办法解决呢? 小编的方案是通过自定义Text ...

  5. android 部分文字加粗,2013.04.08——— android 关于部分文字加粗的有关问题

    2013.04.08--- android 关于部分文字加粗的问题 2013.04.08--- android  关于部分文字加粗的问题 参考:http://blog.csdn.net/garretl ...

  6. android 设置Spinner文字标题颜色 字体大小样式

    原文地址为: android 设置Spinner文字标题颜色 字体大小样式 // 在初始化之前改变 Spinner文字标题颜色         mySpinner.xml 样式文件放在main.xml ...

  7. android canvas添加文字居中,android Canvas drawText 文字居中

    1首先利用canvas获取画布的宽高, //获取屏幕的宽和高 int width = canvas.getWidth(); int height = canvas.getHeight(); 2获取文字 ...

  8. 想学文字生成图片?3招告诉你描述文字生成图片怎么做

    平日里爱刷短视频的小伙伴们肯定发现了最近AI绘画很热门吧,那么你是不是非常好奇他们是怎么通过描述文字就生成精美的图片的呢?其实他们是借助了一些软件才实现"文生图"的哦.那此时你是不 ...

  9. 文字生成图片的软件有哪些?这篇文章给你介绍三个

    随着科技的发展,AI生成图片在艺术创作和创意设计领域也得到了广泛应用.艺术家和设计师可以利用AI生成的图像作为灵感和创意的来源,或者将其作为原始素材进行后续的修改和编辑.AI生成图片可以帮助探索新的艺 ...

  10. android水印控件,Android图片添加文字水印并保存水印文字图片到指定文件

    Android图片添加文字水印并保存水印文字图片到指定文件package zhangphil.test;import android.graphics.Bitmap;import android.gr ...

最新文章

  1. 10 年 IT 老兵给新人程序员的几点建议
  2. iOS 下配置XMPP 服务器openfire详解
  3. 如何实现快速的diff工具(windiff, winmerge)?
  4. spring mvc拦截器和mvc:annotation-driven /的详解
  5. JavaScript从内容中筛选出手机号码集合
  6. 0523 CSS知识点
  7. 1026 程序运行时间 (15分)(附四舍五入标准写法)(解题报告)
  8. trigger 触发器(mysql)
  9. 浅谈​与彼得原理和责任管理有关的小故事
  10. Win8 HTML5与JS编程学习笔记(二)
  11. python true_True关键字,带Python示例
  12. HDU1312 Red and Black(dfs+连通性问题)
  13. js事件里面套事件怎么不管用_原生js利用localstorage实现简易TODO list应用
  14. Flutter进阶—实现动画效果(二)
  15. 【codevs5709】01背包
  16. 由一个LED闪烁问题发现的MTK的LED driver中存在的问题
  17. quarz设置定时器任务的有效时间段_Quartz动态指定定时时间,每秒钟执行一次
  18. 方波信号小波去噪matlab,Matlab小波去噪
  19. PS入门教程之字体的变形艺术
  20. Flutter中,解决按下返回键将应用挂起到后台,并不会退出的问题

热门文章

  1. python爬取ppt课件_Python 爬虫 好大学在线PPT
  2. 线性代数 n维向量思维导图总结(看这一张就完事了)
  3. 【学习教程】CMIP6数据处理方法与典型案例分析
  4. 不容错过的Multisim14.0语言设置!!
  5. RetinaFace+ArcFace人脸识别测试
  6. 【MATLAB】MATLAB三维曲面绘制【详细教程】
  7. 千亿数仓第四章(指标计算_订单分析地域、分类维度分析业务开发)
  8. 湖南职称计算机模拟试题,湖南职称计算机考试培训软件:集职称计算机考试模拟题、长沙职称计算机考试题库...
  9. WinDriver高级编程
  10. 天线理论巴拉尼斯_天线学习类图书推荐 - 欧源通天线厂家