精华内容
下载资源
问答
  • Android TextView 文本SpannableString 文字+图片居中显示,支持图片换行居中显示
    千次阅读
    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();
        }
    }
    
    更多相关内容
  • ios 文本(图文混排):支持图片文字,GIF表情
  • 下面小编就为大家分享一篇Android自定义TextView实现文字图片居中显示的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 可以如同offer在文字旁边插入图片,并且一样实现了拍照获取图片,已经获取本地图片的功能.
  • Android用最简单的方法实现文本框效果,可以同时文字变化和插入图片的效果,如果不会用可以看一下我的博客地址为https://blog.csdn.net/qq_45137584/article/details/111174861。
  • 如图:标题前面添加海外直邮和跨境保税,iOS最好使用文本添加图片附件的方法 NSTextAttachment*textAttachment = [[NSTextAttachment alloc] init];//给附件添加图片textAttachment.image= [UIImage imageNamed:@...

    如图:标题前面添加海外直邮和跨境保税,iOS最好使用富文本添加图片附件的方法

    0818b9ca8b590ca3270a3433284dd417.png

    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];

    展开全文
  • 我这里使用的是Element-ui的上传图片组件 首先引入Element-ui(这个我就不作赘述了,详情参考element中文官网) 在引入文本组件vue-quill-editor 使用在main.js引入相应的样式 import VueQuillEditor from 'vue-...
  • A ReactJS image Viewer Component for mobile 一款基于react的图片预览组件,特别适合于异步获取的文本中的图片,点击图片即可全屏显示,并且带有轮播效果。
  • 一、ckeditor4的配 1.下载ckeditor4 进入官网... 2.解压并配置 ... 3.进行功能配置 点开后会进入一个界面,在网页中可以根据自己需要进行配置,并自动形成配置代码 ...在这里我配置
  • as3.0文本,可以插入表情图片,图文并排,非常实用,将对应的swc导入即可用
  • 一个基于Android原生的EditText的文本组件,支持文字输入,可以插入图片.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 百度ueditor上传图片超范围后有两个问题,一是编辑器里图片显示不完整,二是添加图片后的网页在显示时也会超出网页不好看。想让它自适应100%,网上的方案能解决第一个问题,基本没有第二个问题的方案,经过多次测试...
  • android下textview 显示html片段,可以显示文字图片混排,图片可以是网络图片
  • “刘郎已恨蓬山远,更隔蓬山一万重” 序 现在做的是从web端给眼镜端发送消息,其实就是web端把消息存到数据库,然后眼镜从数据库获取消息即可。...从Word中复制图片文字、标题、部分带样式的文字到编辑器中...

    “刘郎已恨蓬山远,更隔蓬山一万重”

    现在做的是从web端给眼镜端发送消息,其实就是web端把消息存到数据库,然后眼镜从数据库获取消息即可。现在在web端的输入框需要直接复制图片进去,于是就用上了富文本编辑器。

    正文

    在研究了多个富文本编辑器后,基于免费、好用、简洁的原则(主要是基于免费),最终选择使用wangEditor
    使用场景
    从Word中复制图片、文字、标题、部分带样式的文字到编辑器中。可实现取出文字和图片的功能,不包含Word上的样式,比如加粗、斜体等样式。
    说明:以下内容均基于该使用场景。
    使用方法

    1. 下载wangEditor的JS。
      官网首页有个下载,点下载之后进入GitHub,选择要下载的版本后,下载source code压缩包。然后从压缩包中把JS取出来:
      在这里插入图片描述
    2. 将上面说的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>
    
    1. 获取富文本编辑器的内容
    var editorData = editor.txt.html();
    

    获取编辑器的内容还有其他方式:

    var editorData = editor.txt.text();
    //或者
    var editorData = editor.txt.getJSON();
    

    具体参考文档:读取内容

    1. 通过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;
    	}
    }
    
    1. 通过上面代码就能获取到在编辑器中输入的文字,或者是从Word中粘贴过去的图片。然后通过文字数组和图片编码的数组,传到服务端处理就可以了。
    2. 但是如果从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);
    };
    
    1. 我再把后台处理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();
    }
    
    1. 特别说明一下,上面的cleanPastedHTML方法,引用了这篇博客中的方法。声明感谢!
    展开全文
  •  1.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啊

    如果你喜欢这篇文章,或者有任何疑问,可以扫描第一个二维码,加楼主好友哦

    也可以扫第二个二维码,关注楼主个人微信公众号。这里有很多生活,职业,技术相关的文章哦。欢迎您的到来。

    微信号:                                             公众号


    展开全文
  • let content = res.content // 后台返回的文本值 content = content.replace(/;\swidth\s:\s*/g, ‘;max-width:100%;’); content = content.replace(/<img[^>]>/gi, (match, capture) => { return ...
  • ), onTap: () {}, ), ), ], ), ), 如图文本中添加图片 TextStyle styleColor007affSize12 = TextStyle( fontSize: setFontSize(12), fontWeight: FontWeight.w600, color: Color(0xFF007AFF), fontFamily: "SF Pro...
  • html中获取图片 文章中提取图片 正则获取图片 文本提取图片路径 字符中中获取图片路径 html中获取图片 文章中提取图片 正则获取图片 文本提取图片路径 字符中中获取图片路径 html中获取图片 文章中提取图片 正则...
  • imageManagerUrl:UEDITOR_HOME_URL + "../yunserver/yunImgManage.php",//图片管理接口 imageManagerPath:"http://", snapscreenHost:'ueditor.baidu.com', snapscreenServerUrl:UEDITOR_HOME_URL + "../...
  • NSMutableAttributedString文本,文字大小不同默认底部是对齐的 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 ...
  • //同时插入一个空的EditText,防止插入多张图片无法写文字 addEditTextAtIndex(lastEditIndex + 1, ""); } else if (editStr2.length() == 0) { // 如果光标已经顶在了editText的最末端,则需要添加新的imageView和...
  • 文字+图片的混编(文本)

    千次阅读 2015-12-26 16:49:17
    在实际项目开发过程中,我们常会遇到一段文字中既要有图片又要有文字,例如我们经常使用的QQ、微信的聊天对话框中,表情和文字共存就是一种典型的图文混排。 QQ20150827-1.png 可以直接使用Quart2D...
  • iOS中HTML编辑器(可添加图片文字表情,可转换为HTML查看),基于WordPress-Editor 进行二次开发,可自定义底部工具栏样式
  • powperpaste现在是收费插件,官网最低售价12美元/每月,可从word直接粘贴文本,同时上传图片
  • 用多了 JQuery ,习惯了使用JQuery的API操作 DOM ,几乎忘记了原生JS对DOM操作,今天在项目中遇到了文字图片混输的情况,第一个想到的办法是用 textarea 实现,结果发现实现不了图片输入,然后想着找个文本编辑...
  • 这篇文章主要介绍了PHP文字图片功能原理与实现方法,结合具体实例形式分析了php基于gd2扩展库生成图片的相关配置及使用方法,需要的朋友可以参考下本文实例讲述了PHP文字图片功能。分享给大家供大家参考,具体如下...
  • 关于从后台请求回来的文本标签中文字图片路径的提取。 以下是以我项目为例,希望能对遇到同样问题的小伙伴有所帮助!!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,899
精华内容 6,759
关键字:

富文字图片