-
2019-02-15 20:16:17
Android TextView 富文本SpannableString 文字+图片居中显示
代码示意:
注意1. drawable 为图片资源,只能是一整张图,如酒店星级,5星级一张5个星星的图片,不能是1个星星循环5次拼接一起,因为涉及到图片换行显示。
2. textView先显示文本,后加空格" ",然后再拼接图片上去。
3. 需要根据字段映射不同的图片,如1-5星级,对应的不同的图片drawable和iconWidth.textView.setText(title); // **设置文字** ... /** * 标题末尾插入星钻 */ public static void insertDrawable(Context context, TextView tv, Drawable drawable, SpannableString sb, int iconWidth) { if (drawable == null || sb == null) { return; } drawable.setBounds(ExtendUtils.dip2px(context, 2), 0, ExtendUtils.dip2px(context, iconWidth), ExtendUtils.dip2px(context, 10)); // 最后两个参数分别为图片宽度、高度 //用这个drawable对象代替字符串 HotelListImageSpan span = new HotelListImageSpan(drawable); //包括0但是不包括"star".length()即:4 sb.setSpan(span, 0, "star".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); tv.append(sb); // **在最后添加图片** }
自定义ImageSpan代码:
import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.text.style.ImageSpan; /** * 列表页富文本,支持图片换行居中 */ public class HotelListImageSpan extends ImageSpan { public HotelListImageSpan(Drawable drawable) { super(drawable); } @Override public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { Drawable b = getDrawable(); canvas.save(); int transY; //要显示的文本高度-图片高度除2等居中位置+top(换行情况) transY = ((bottom - top) - b.getBounds().bottom) / 2 + top; //偏移画布后开始绘制 canvas.translate(x, transY); b.draw(canvas); canvas.restore(); } }
更多相关内容 -
swift-ios富文本(图文混排):支持图片文字GIF表情
2019-08-15 05:39:51ios 富文本(图文混排):支持图片,文字,GIF表情 -
Android自定义TextView实现文字图片居中显示的方法
2020-08-28 05:15:20下面小编就为大家分享一篇Android自定义TextView实现文字图片居中显示的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
富文本编辑器(可以同时添加文字和图片)
2015-10-30 10:05:43可以如同offer在文字旁边插入图片,并且一样实现了拍照获取图片,已经获取本地图片的功能. -
Android用最简单的方法实现富文本框效果,可以同时文字变化和插入图片的效果
2020-12-14 18:00:00Android用最简单的方法实现富文本框效果,可以同时文字变化和插入图片的效果,如果不会用可以看一下我的博客地址为https://blog.csdn.net/qq_45137584/article/details/111174861。 -
iOS 富文本文字添加图片
2021-06-13 02:19:07如图:标题前面添加海外直邮和跨境保税,iOS最好使用富文本添加图片附件的方法 NSTextAttachment*textAttachment = [[NSTextAttachment alloc] init];//给附件添加图片textAttachment.image= [UIImage imageNamed:@...如图:标题前面添加海外直邮和跨境保税,iOS最好使用富文本添加图片附件的方法
NSTextAttachment*textAttachment = [[NSTextAttachment alloc] init];
//给附件添加图片
textAttachment.image= [UIImage imageNamed:@"trc_mall_overseas_directmail"];
//调整一下图片的位置,如果你的图片偏上或者偏下,调整一下bounds的y值即可
textAttachment.bounds=CGRectMake(0, -4, textAttachment.image.size.width, textAttachment.image.size.height);
//把附件转换成可变字符串,用于替换掉源字符串中的表情文字
NSAttributedString*imageStr = [NSAttributedString attributedStringWithAttachment:textAttachment];
[m_attributedString appendAttributedString:imageStr];
-
vue富文本框(插入文本、图片、视频)的使用及问题小结
2021-01-21 13:14:27我这里使用的是Element-ui的上传图片组件 首先引入Element-ui(这个我就不作赘述了,详情参考element中文官网) 在引入富文本组件vue-quill-editor 使用在main.js引入相应的样式 import VueQuillEditor from 'vue-... -
一款基于react的图片预览组件特别适合于异步获取的富文本中的图片
2019-08-10 05:54:47A ReactJS image Viewer Component for mobile 一款基于react的图片预览组件,特别适合于异步获取的富文本中的图片,点击图片即可全屏显示,并且带有轮播效果。 -
富文本编辑器CKEditor配置及图片上传配置
2021-01-20 03:14:34一、ckeditor4的配 1.下载ckeditor4 进入官网... 2.解压并配置 ... 3.进行功能配置 点开后会进入一个界面,在网页中可以根据自己需要进行配置,并自动形成配置代码 ...在这里我配置 -
as3.0富文本,可以插入表情图片,图文并排
2018-12-11 14:02:24as3.0富文本,可以插入表情图片,图文并排,非常实用,将对应的swc导入即可用 -
安卓EditText输入框相关-一个基于Android原生的EditText的富文本组件支持文字输入可以插入图片.rar
2019-07-29 17:30:31一个基于Android原生的EditText的富文本组件,支持文字输入,可以插入图片.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。 -
百度富文本编辑器ueditor上传图片宽高超范围问题
2018-06-08 18:24:40百度ueditor上传图片超范围后有两个问题,一是编辑器里图片显示不完整,二是添加图片后的网页在显示时也会超出网页不好看。想让它自适应100%,网上的方案能解决第一个问题,基本没有第二个问题的方案,经过多次测试... -
Android-TextView-富文本-html图片显示.rar
2019-08-13 16:33:06android下textview 显示html片段,可以显示文字和图片混排,图片可以是网络图片 -
使用wangEditor富文本编辑器上传图片和文字
2019-09-06 16:05:51“刘郎已恨蓬山远,更隔蓬山一万重” 序 现在做的是从web端给眼镜端发送消息,其实就是web端把消息存到数据库,然后眼镜从数据库获取消息即可。...从Word中复制图片、文字、标题、部分带样式的文字到编辑器中...“刘郎已恨蓬山远,更隔蓬山一万重”
序
现在做的是从web端给眼镜端发送消息,其实就是web端把消息存到数据库,然后眼镜从数据库获取消息即可。现在在web端的输入框需要直接复制图片进去,于是就用上了富文本编辑器。
正文
在研究了多个富文本编辑器后,基于免费、好用、简洁的原则(主要是基于免费),最终选择使用wangEditor。
使用场景
从Word中复制图片、文字、标题、部分带样式的文字到编辑器中。可实现取出文字和图片的功能,不包含Word上的样式,比如加粗、斜体等样式。
说明:以下内容均基于该使用场景。
使用方法- 下载wangEditor的JS。
官网首页有个下载,点下载之后进入GitHub,选择要下载的版本后,下载source code压缩包。然后从压缩包中把JS取出来:
- 将上面说的JS复制你的项目中,然后在页面上引用。
<script src="/js/wangEditor.min.js"></script>
创建一个富文本编辑器:
<script type="text/javascript"> var editor ; //定义全局变量 //富文本编辑器 var E = window.wangEditor; editor = new E('#textarea'); editor.customConfig.uploadImgShowBase64 = true; // 使用 base64 保存图片,使用这种方式上传图片,然后在服务器端把base64编码转成图片。这样就不需要上传文件了。 editor.customConfig.menus = []; //设置不要工具栏 editor.create(); </script>
- 获取富文本编辑器的内容
var editorData = editor.txt.html();
获取编辑器的内容还有其他方式:
var editorData = editor.txt.text(); //或者 var editorData = editor.txt.getJSON();
具体参考文档:读取内容
- 通过
editor.txt.html();
读取的内容都含有样式,(如果是通过通过Word粘贴进去的文本或图片,请看步骤6)比如p标签,img标签之类的,所以需要去除这些标签,直接把p标签里面的内容和img标签图片的base64编码取出来,用到正则表达式:
//获取编辑器的内容 var editorData = editor.txt.html(); //定义一个图片编码和文字的数组 var picArr = new Array(); var wordArr = new Array(); //获取图片编码的正则 var p = /<img\s?src="data\:image\/.*?;base64,(.*?)"/ig; while(true){ var match = p.exec(editorData); if(match){ picArr.push(match[1]); }else{ break; } } //获取p标签中的文字 p = /<p>([^<]*?)<\/p>/ig; while(true){ var match = p.exec(editorData); if(match){ //判断是否全是空格 if (!match[1].match(/^[ ]*$/)) { wordArr.push(match[1]); } }else{ break; } }
- 通过上面代码就能获取到在编辑器中输入的文字,或者是从Word中粘贴过去的图片。然后通过文字数组和图片编码的数组,传到服务端处理就可以了。
- 但是如果从Word上粘贴文字到编辑器的话,会有很多样式,比如:加粗、斜体、下划线等,这种情况的需要去除这些样式文本,我把整个的代码都贴出来:
直接可以用的JS代码:
function getEditorData(){ //处理富文本编辑器的数据 var picArr = new Array(); var editorData = editor.txt.html(); //处理Word复制过来的样式 editorData = cleanPastedHTML(editorData); //获取图片 var p = /<img\s?src="data\:image\/.*?;base64,(.*?)"/ig; while(true){ var match = p.exec(editorData); if(match){ picArr.push(match[1]); }else{ break; } } var wordArr = new Array(); //获取图片后面紧跟的文字,由于紧跟在图片后面,所以通过p标签获取文字的正则获取不到。 p = /">(.*?)<br>/ig; while(true){ var match = p.exec(editorData); if(match){ if (match[1] != '') { wordArr.push(match[1]); } }else{ break; } } //获取标题内容,因为Word中的标题,在富文本编辑器中获取出来都带<h1></h1>或<h2></h2>等 p = /<h\d>(.*?)<\/h\d>/ig; while(true){ var match = p.exec(editorData); if(match){ //判断是否全是空格 if (!match[1].match(/^[ ]*$/)) { wordArr.push(match[1]); } }else{ break; } } //获取p标签中的文字 p = /<p>([^<]*?)<\/p>/ig; while(true){ var match = p.exec(editorData); if(match){ //判断是否全是空格 if (!match[1].match(/^[ ]*$/)) { wordArr.push(match[1]); } }else{ break; } } } //去掉Word复制过来的样式 function cleanPastedHTML(input) { // 1. remove line breaks / Mso classes var stringStripper = /(\n|\r| class=(")?Mso[a-zA-Z]+(")?)/g; var output = input.replace(stringStripper, ' '); // 2. strip Word generated HTML comments var commentSripper = new RegExp('<!--(.*?)-->','g'); var output = output.replace(commentSripper, ''); var tagStripper = new RegExp('<(/)*(meta|link|span|\\?xml:|st1:|o:|font)(.*?)>','gi'); // 3. remove tags leave content if any output = output.replace(tagStripper, ''); // 4. Remove everything in between and including tags '<style(.)style(.)>' var badTags = ['style', 'script','applet','embed','noframes','noscript']; for (var i=0; i< badTags.length; i++) { tagStripper = new RegExp('<'+badTags[i]+'.*?'+badTags[i]+'(.*?)>', 'gi'); output = output.replace(tagStripper, ''); } // 5. remove attributes ' style="..."' var badAttributes = ['style', 'start']; for (var i=0; i< badAttributes.length; i++) { var attributeStripper = new RegExp(' ' + badAttributes[i] + '="(.*?)"','gi'); output = output.replace(attributeStripper, ''); } //去掉下划线、删除线、斜体、加粗等标签 output = output.replaceAll("<b>","").replaceAll("</b>","").replaceAll("<i>","").replaceAll("</i>","").replaceAll("<u>","") .replaceAll("</u>","").replaceAll("<s>","").replaceAll("</s>","").replaceAll("<p >","<p>"); return output; } //全部替换方法 String.prototype.replaceAll = function(s1,s2){ return this.replace(new RegExp(s1,"gm"),s2); };
- 我再把后台处理base64编码成图片的方法再贴一下:
//先把base64编码转成流,imgBase64Code就是前台传过来的图片编码,由于我这里把图片编码加到数组里了,所以要先循环数组,这里省略了循环。 byte[] byt = Base64Utils.decode(imgBase64Code); //再把流写成文件,fileName是随机生成的文件名,filePath是要存储的路径 FileUtil.uploadFile(byt, filePath, fileName); public static byte[] decode(String s) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { decode(s, bos); } catch (IOException e) { throw new RuntimeException(); } byte[] decodedBytes = bos.toByteArray(); try { bos.close(); bos = null; } catch (IOException ex) { System.err.println("Error while decoding BASE64: " + ex.toString()); } return decodedBytes; } public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception { File targetFile = new File(filePath); if (!targetFile.exists()) { targetFile.mkdirs(); } FileOutputStream out = new FileOutputStream(filePath +"/"+ fileName); out.write(file); out.flush(); out.close(); }
- 特别说明一下,上面的
cleanPastedHTML
方法,引用了这篇博客中的方法。声明感谢!
- 下载wangEditor的JS。
-
iOS开发 在图片上添加文字,图片合成文字,图片上添加富文本,美图秀秀,美颜相机文字编辑
2017-04-21 17:32:081.0 :在图片上增加文字,是图片编辑中非常常见的需求。 1.1 :无demo说话不硬气,上github地址:https://github.com/horisea/PictureWhitening 欢迎star,你的星星是我持续创作的动力 二:上一下效果...一:前言
1.0 :在图片上增加文字,是图片编辑中非常常见的需求。
1.1 :无demo说话不硬气,上github地址:https://github.com/horisea/PictureWhitening欢迎star,你的星星是我持续创作的动力
二:上一下效果图
下面我们看一下功能: 1.首先文字的颜色是可以换的;2.文字的大小是可以控制的3.给定宽度,文字的高度是动态计算的4.文字的高度不会超出图片等等。
三:上方法声明
参数确实多了一点,但是为了更加智能,好用。。我发现一个参数也不能去掉。/** 图片合成文字 @param text 文字 @param fontSize 字体大小 @param textColor 字体颜色 @param textFrame 字体位置 @param image 原始图片 @param viewFrame 图片所在View的位置 @return UIImage * */ + (UIImage *)imageWithText:(NSString *)text textFont:(NSInteger)fontSize textColor:(UIColor *)textColor textFrame:(CGRect)textFrame originImage:(UIImage *)image imageLocationViewFrame:(CGRect)viewFrame;
四:方法实现+ (UIImage *)imageWithText:(NSString *)text textFont:(NSInteger)fontSize textColor:(UIColor *)textColor textFrame:(CGRect)textFrame originImage:(UIImage *)image imageLocationViewFrame:(CGRect)viewFrame { if (!text) { return image; } if (!fontSize) { fontSize = 17; } if (!textColor) { textColor = [UIColor blackColor]; } if (!image) { return nil; } if (viewFrame.size.height==0 || viewFrame.size.width==0 || textFrame.size.width==0 || textFrame.size.height==0 ){return nil;} NSString *mark = text; CGFloat height = [mark sizeWithPreferWidth:textFrame.size.width font:[UIFont systemFontOfSize:fontSize]].height; // 此分类方法要导入头文件 if ((height + textFrame.origin.y) > viewFrame.size.height) { // 文字高度超出父视图的宽度 height = viewFrame.size.height - textFrame.origin.y; } // CGFloat w = image.size.width; // CGFloat h = image.size.height; UIGraphicsBeginImageContext(viewFrame.size); [image drawInRect:CGRectMake(0, 0, viewFrame.size.width, viewFrame.size.height)]; NSDictionary *attr = @{NSFontAttributeName: [UIFont systemFontOfSize:fontSize], NSForegroundColorAttributeName : textColor }; //位置显示 [mark drawInRect:CGRectMake(textFrame.origin.x, textFrame.origin.y, textFrame.size.width, height) withAttributes:attr]; UIImage *aimg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return aimg; }
最后:github地址里还附带了,图片美白,变灰,旋转,图片合成等方法。。欢迎star啊
如果你喜欢这篇文章,或者有任何疑问,可以扫描第一个二维码,加楼主好友哦
也可以扫第二个二维码,关注楼主个人微信公众号。这里有很多生活,职业,技术相关的文章哦。欢迎您的到来。
微信号:
公众号
-
微信小程序富文本图片宽度自适应以及文字自动换行等解决方法
2021-07-30 13:25:02let content = res.content // 后台返回的富文本值 content = content.replace(/;\swidth\s:\s*/g, ‘;max-width:100%;’); content = content.replace(/<img[^>]>/gi, (match, capture) => { return ... -
Flutter --RichText富文本文字图片渲染及点击事件处理使用
2021-05-21 19:02:48), onTap: () {}, ), ), ], ), ), 如图富文本中添加图片 TextStyle styleColor007affSize12 = TextStyle( fontSize: setFontSize(12), fontWeight: FontWeight.w600, color: Color(0xFF007AFF), fontFamily: "SF Pro... -
从富文本(HTML字符串)中获取图片
2013-03-06 20:06:17html中获取图片 文章中提取图片 正则获取图片 富文本提取图片路径 字符中中获取图片路径 html中获取图片 文章中提取图片 正则获取图片 富文本提取图片路径 字符中中获取图片路径 html中获取图片 文章中提取图片 正则... -
jQuery怎么获取到富文本ueditor编辑器里面的文字和图片内容
2018-11-02 13:38:23imageManagerUrl:UEDITOR_HOME_URL + "../yunserver/yunImgManage.php",//图片管理接口 imageManagerPath:"http://", snapscreenHost:'ueditor.baidu.com', snapscreenServerUrl:UEDITOR_HOME_URL + "../... -
iOS富文本设置文字间隔,部分文字上移
2021-06-24 16:11:03NSMutableAttributedString富文本,文字大小不同默认底部是对齐的 NSString *number = @"983元"; NSInteger length = number.length - 1; NSMutableAttributedString *str = [[NSMutableAttributedString alloc] ... -
UILabel 富文本 显示文字和图片
2016-10-10 13:24:25// 在UILabel上显示文字和图片 //UIlabel 富文本 字体显示不同颜色 UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)]; testLabel.backgroundColor = [UIColor ... -
iOSUITextView富文本展示文字图片
2018-01-03 09:53:40要在一个UITextView中既展示图片和文字,主要代码如下: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ //获得需要展示的图片 UIImage ... -
Android富文本编辑器,图片、视频、文字混合编辑
2019-05-31 22:02:39//同时插入一个空的EditText,防止插入多张图片无法写文字 addEditTextAtIndex(lastEditIndex + 1, ""); } else if (editStr2.length() == 0) { // 如果光标已经顶在了editText的最末端,则需要添加新的imageView和... -
文字+图片的混编(富文本)
2015-12-26 16:49:17在实际项目开发过程中,我们常会遇到一段文字中既要有图片又要有文字,例如我们经常使用的QQ、微信的聊天对话框中,表情和文字共存就是一种典型的图文混排。 QQ20150827-1.png 可以直接使用Quart2D... -
ios-iOS中HTML编辑器(可添加图片文字表情,可转换为HTML查看).zip
2019-07-11 19:28:35iOS中HTML编辑器(可添加图片文字表情,可转换为HTML查看),基于WordPress-Editor 进行二次开发,可自定义底部工具栏样式 -
TinyMCE + 插件powerpaste实现word直接粘贴富文本,同时上传图片.zip
2019-07-05 11:50:24powperpaste现在是收费插件,官网最低售价12美元/每月,可从word直接粘贴富文本,同时上传图片 -
Vue实现图片与文字混输效果
2021-01-19 21:02:56用多了 JQuery ,习惯了使用JQuery的API操作 DOM ,几乎忘记了原生JS对DOM操作,今天在项目中遇到了文字和图片混输的情况,第一个想到的办法是用 textarea 实现,结果发现实现不了图片输入,然后想着找个富文本编辑... -
使用PHP将文字转换成图片的功能实现方法
2021-03-22 21:34:04这篇文章主要介绍了PHP文字转图片功能原理与实现方法,结合具体实例形式分析了php基于gd2扩展库生成图片的相关配置及使用方法,需要的朋友可以参考下本文实例讲述了PHP文字转图片功能。分享给大家供大家参考,具体如下... -
小程序富文本标签中文字及图片路径的提取 入坑~填坑
2020-05-09 18:19:20关于从后台请求回来的富文本标签中文字及图片路径的提取。 以下是以我项目为例,希望能对遇到同样问题的小伙伴有所帮助!!