最后像国际象棋格子一样,一块一块的替换掉,由于计算相对比较复杂,所以耗时比较长,因此当时那个demo也让我搁置了。
最近看到这篇日推,不由得眼前一亮,因为很少有人在android端做这种东西,因为算法方案是一大堆,不过很少有感兴趣的人去移植到android- -,我就参考了这篇文章的方案,不由得赞叹这个方法的巧妙,避免了大量的计算,图片转化率大大提高了,可以看看效果图:
ccg和修政
哈哈哈,是不是很酷炫?
为了看清每一个字母,特意上传了一个大图(ps:抖音上竟然有人手动敲的ascii码,而且敲了几天,真是丧心病狂)。好了,下面进入正题~
1、图片转ascii
巧妇难为无米之炊,既然要图片/视频转化 ascii码,要有对应的媒体文件,选择一个图片,相信每一个android开发者都或多或少有个趁手的图片选择库,这里使用了 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.3',持续更新的库,比较好用。
用法大概如下~
publicstaticvoidchoosePhoto(Activity context, intrequestCode){
PictureSelector.create(context)
.openGallery(PictureMimeType.ofAll()) //全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
.maxSelectNum( 1) // 最大图片选择数量 int
.imageSpanCount( 4) // 每行显示个数 int
.selectionMode(PictureConfig.SINGLE) // 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
.isCamera( true) // 是否显示拍照按钮 true or false
.imageFormat(PictureMimeType.PNG) // 拍照保存图片格式后缀,默认jpeg
.isZoomAnim( true) // 图片列表点击 缩放效果 默认true
.sizeMultiplier( 0.5f) // glide 加载图片大小 0~1之间 如设置 .glideOverride()无效
.openClickSound( true) // 是否开启点击声音 true or false
.minimumCompressSize( 500) // 小于100kb的图片不压缩
.forResult(requestCode); //结果回调onActivityResult code
}
接着进行下一步操作,上代码:
public staticBitmap createAsciiPic( finalStringpath, Context context) {
finalStringbase = "#8XOHLTI)i=+;:,."; // 字符串由复杂到简单
StringBuilder text = newStringBuilder();
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = newDisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
intwidth = dm.widthPixels;
intheight = dm.heightPixels;
Bitmap image = BitmapFactory.decodeFile(path); //读取图片
intwidth0 = image.getWidth();
intheight0 = image.getHeight();
intwidth1, height1;
intscale = 7;
<