精华内容
下载资源
问答
  • 1.我们用xml为TextView设置图片的时候,通常写法都是这样写的 <TextView android:id="@+id/favort" android:layout_width="wrap_content" android:layout_height="wrap_...

    Talk is cheap , show you the code!

    1.我们用xml为TextView设置图片的时候,通常写法都是这样写的

    <TextView 
    android:id="@+id/favort" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="18dp" 
    android:drawablePadding="6dp" 
    android:drawableRight="@mipmap/xxx" 
    android:gravity="center_vertical" 
    android:text="0xxx" 
    android:textSize="12sp"/>
    

    2.需求场景,电量发生变化的时候,需要在代码里改变电量图片,这时候就需要考虑用代码动态设置了:

    if (datas.get(position).isPraised()) {
     Drawable drawable = mContext.getResources().getDrawable(R.mipmap.ico_dianzan_selected); // 这一步必须要做,否则不会显示. 
    drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); 
    
    favort.setCompoundDrawables(null, null, drawable, null); 
    } else { 
        Drawable drawable = mContext.getResources().getDrawable(R.mipmap.ico_dianzan); 
        // 这一步必须要做,否则不会显示. 
        drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());             
    
    favort.setCompoundDrawables(null, null, drawable, null); 
    }
    

    最后完美解决

    有老铁说用ImageView+TextView 也可以实现点赞,当然这也是可以的,不过这样多了包裹关系,一个TextView 能搞定的,何必复杂实现呢,哈哈哈哈哈。。。。。。

     

     

    展开全文
  • 图片和文字同时在一个div里

    千次阅读 2020-03-13 17:01:04
    在一个div里面有文字也有图片的时候容易出现文字和图片中心点对不齐: 我的解决方法是,对图片加上绝对定位 position:absolute; 父容器加相对定位position: relative; 如果出现图片和文字重合,就用 margin-left:-...

    在一个div里面有文字也有图片的时候容易出现文字和图片中心点对不齐:这里的图片和文字就没对齐
    我的解决方法是,对图片加上绝对定位

    position:absolute;
    

    父容器加相对定位position: relative;
    如果出现图片和文字重合,就用

    margin-left:-30px;
    

    具体多少像素自己调整

    展开全文
  • QLabel是Qt自带的一个显示用控件,可以用来显示图片和文本。其使用也非常方便:用setPixmap(const QPixmap &amp;amp;amp;amp;)接口来设置要显示的图片,用setText(const QString &amp;amp;amp;amp;)接口来...

    环境

    系统:Windows10 64位 家庭中文版
    Qt版本:5.6.0 msvc2013 64位
    编译器:Visual Studio 2013 专业版

    前言

    QLabel是Qt自带的一个显示用控件,可以用来显示图片和文本。其使用也非常方便:用setPixmap(const QPixmap &)接口来设置要显示的图片,用setText(const QString &)接口来设置要显示的文本。然而在使用过程中,我发现QLabel的setPixmap(const QPixmap &)和setText(const QString &)是互斥的,即两个同时设置时,只有一个生效(最后设置的那个生效)。
    示例代码及现象如下:

        m_pLblPixmap = new QLabel(this);
        m_pLblPixmap->resize(200, 200);
        m_pLblPixmap->move(0, 0);
        m_pLblPixmap->setAlignment(Qt::AlignCenter);
        m_pLblPixmap->setScaledContents(true);
        //我这边两个接口都调用,但是最后调用的setPixmap覆盖了setText
        m_pLblPixmap->setText("This is pixmap");
        m_pLblPixmap->setPixmap(QPixmap(":/image/bg.jpg"));
    
        m_pLblText = new QLabel(this);
        m_pLblText->resize(200, 200);
        m_pLblText->move(m_pLblPixmap->x() + m_pLblPixmap->width() + 2, 0);
        m_pLblText->setAlignment(Qt::AlignCenter);
        m_pLblText->setScaledContents(true);
        //我这边两个接口都调用,但是最后调用的setText覆盖了setPixmap
        m_pLblText->setPixmap(QPixmap(":/image/bg.jpg"));
        m_pLblText->setText("This is text");

    最后设置的生效

    解决方法

    用样式表设置背景图片,用setText(const QString &)设置文本,示例代码及现象如下:

        m_pLblStyleSheet = new QLabel(this);
        m_pLblStyleSheet->resize(200, 200);
        m_pLblStyleSheet->move(m_pLblText->x() + m_pLblText->width() + 2, 0);
        m_pLblStyleSheet->setScaledContents(true);
        m_pLblStyleSheet->setAlignment(Qt::AlignCenter);
        //这个不会适应图片,可能出现图片显示不全或者无法充满整个QLabel
    //    m_pLblStyleSheet->setStyleSheet(QString("background-image:url(:/image/bg.jpg)"));
        //这个会自动适应图片,我这里还设置了文本的颜色
        m_pLblStyleSheet->setStyleSheet(QString("border-image:url(:/image/bg.jpg);color:rgb(128,128,128);"));
        m_pLblStyleSheet->setText("This is style sheet");

    图片和文字同时显示

    展开全文
  • Python | 图片文字

    千次阅读 2019-04-01 15:24:08
    目录 1  背景2  数据概况3  需求4  利用Python进行转换4.1 ...导入相应的库4.2 ...设置百度云的API相关参数4.2.1 ...定义读取图片函数4.4  单独转换...

    1 背景

    现在需要分析大众点评网站的评论,进行情感分析,主题模型等等,所以第一步是进行爬虫,现在这部分工作已经完成(后面会总结利用Python进行爬虫)但是在爬虫的过程中发现了一个问题,就是点评网站上评论中会有部分是文字被替换成了图片,所以直接爬取评论下来就会出现信息不全的情况,这时候我们采用的方法是什么呢?

    • 第一步是使用截图的方式把评论给截下来!
    • 第二步是利用Python将图片转为文字!

    今天我们主要探讨的就是第二部分!如何将图片转为文字呢?

    2 数据概况

    那我们现在的数据是怎么样的呢?一个文件夹代表一个商家
    在这里插入图片描述

    每个文件夹下面呢?分别是这个商家对应的所有评论的截图!
    在这里插入图片描述

    3 需求

    现在的需求就是将每一个商家所有的评论图片全部转为文字,最后希望能形成一个DataFrame,有三列:

    • 一列是文件夹名称,也就是对应商户号
    • 一列是所有图片的全名
    • 一列是转为的文字的列

    4 利用Python进行转换

    4.1 导入相应的库

    import time
    import pandas as pd
    import json
    import random
    from aip import AipOcr
    import os
    

    4.2 设置百度云的API相关参数

    # 连接api
    APP_ID = "15433908"
    API_KEY = "tcHjIKc51txVe73RNA2Pt7pY"
    SECRET_KEY = "08OvI17ZHWt6Q9PoL4o885LXxRFvdSLG"
    client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
    
    # 返回值设置
    options = {}
    options["language_type"] = "CHN_ENG"
    options["detect_direction"] = "False"
    options["detect_language"] = "False"
    options["probability"] = "False"
    

    4.2.1 如何获取上述API的相关关键参数?

    这就有一个问题了,如何设置百度云的相关API参数呢?

    • 首先注册登录百度云(网址:https://login.bce.baidu.com),

    • 然后找到下面这个东东:
      在这里插入图片描述

    • 然后创建一个项目
      在这里插入图片描述
      还可以看到今天我也使用了其中的一个项目 并且调用了接近3000次,也就是转换了这么多的图片!

    • 进入界面后填写相关信息,点击创建即可!
      在这里插入图片描述

    • 创建完毕之后,点击查看详情
      在这里插入图片描述

    • 然后就会看到下图了,重要的三个参数就可以获得!
      在这里插入图片描述
      然后把上述参数换成自己的就ok啦!注意一天免费使用50000次~

    下面就愉快的调用API啦~

    4.3 定义读取图片函数

    # 读取图片函数
    def get_file_content(filePath):
        with open(filePath, 'rb') as fp:
            return fp.read()
    

    4.4 单独转换图片的内容

    4.4.1 看共有多少文件夹

    # 读取评论信息下面所有文件夹的名称
    mer_folds = os.listdir('./评论信息/')
    print('文件夹下面共有 %d 个商户的评论图片' % len(mer_folds))
    mer_folds[:5]
    
    文件夹下面共有 138 个商户的评论图片
    
    
    
    
    
    ['68045603', '76936090', '23060131', '66264063', '95358955']
    

    4.4.2 看评论图片

    os.listdir('./评论信息/76936090')
    
    ['39018468.jpg']
    

    4.4.3 打印这个图片的内容

    get_file_content('./评论信息/76936090/39018468.jpg')
    
    b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00C\x00\x08\x06\x06\x07\x06\x05\x08\x07\x07\x07\t\t\x08\n\x0c\x14\r\x0c\x0b\x0b\x0c\x19\x12\x13\x0f\x14\x1d\x1a\x1f\x1e\x1d\x1a\x1c\x1c $.\' ",#\x1c\x1c(7),01444\x1f\'9=82<.342\xff\xdb\x00C\x01\t\t\t\x0c\x0b\x0c\x18\r\r\x182!\x1c!22222222222222222222222222222222222222222222222222\xff\xc0\x00\x11\x08\x00\x18\x02\xee\x03\x01"\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x1f\x00\x00\x01\x05\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\xff\xc4\x00\xb5\x10\x00\x02\x01\x03\x03\x02\x04\x03\x05\x05\x04\x04\x00\x00\x01}\x01\x02\x03\x00\x04\x11\x05\x12!1A\x06\x13Qa\x07"q\x142\x81\x91\xa1\x08#B\xb1\xc1\x15R\xd1\xf0$3br\x82\t\n\x16\x17\x18\x19\x1a%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\x83\x84\x85\x86\x87\x88\x89\x8a\x92\x93\x94\x95\x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xff\xc4\x00\x1f\x01\x00\x03\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\xff\xc4\x00\xb5\x11\x00\x02\x01\x02\x04\x04\x03\x04\x07\x05\x04\x04\x00\x01\x02w\x00\x01\x02\x03\x11\x04\x05!1\x06\x12AQ\x07aq\x13"2\x81\x08\x14B\x91\xa1\xb1\xc1\t#3R\xf0\x15br\xd1\n\x16$4\xe1%\xf1\x17\x18\x19\x1a&\'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x92\x93\x94\x95\x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00?\x00\xf7)\xb5{+y\xee\xe2\x9a`\x86\xd2\x01q9 \xedD;\xb0I\xff\x00\x807\x1dx\xa7\xe9\xda\x85\xbe\xa9d\x97V\xc5\x8clJ\x95u*\xc8\xc0\xe0\xab)\xe4\x10A\x04\x1a\xe0\xe7\xd3\xe7\x83S\xd6&\x9e\xfe[\x99\x06\xa9h|\xa6\x00G#\xc8b\x08\x08\xeb\xb5\x018\x19\xc7s\x92+c\xec\xc6[\xbf\x14]%\xb3]\x15\x94\xdb\x1d<m\xf2\xae\xbfq\x13.\xf0x\xceX\x82x\xc8\xeb\x9c\nL\x0b\xf3\xf8\xcbG\xb6\xd2\xedu\t\xe5\x928.\xae\x9a\xd6<\xa6X\xb2\xb3+\x12\x07E\x1bI\'\xd2\xad\x0f\x12i\x0f\xa7G\xa8Gx\xb2\xdaH\xe5\x12X\x91\x9c\x16\x19\xc8\xf9A\xf45\xe3\xda7\x87\xf5\x18t\xdd*\xda\x1b\x08^\xe6y.\x1do\xb4\xc0\xb1\xdd\xc3\xe5K\x87\x0b\xbd\xd1\x06N\x06\xfc\x92T\xed\xdb\x81]\xa6\x95w\xa9\xd9\xfc7\xba\x8eH~\xc9%\x94\xff\x00fF\xb7\xff\x00\\\xdbe\n\xec\xca\x0b\x00\xe4\xee\xce\x19\xb2I=\xe9\xaf\xeb\xf0\x07\xa7\xf5\xeat\xd2x\xc3C\x89\x0b\xc9x\xe8\xa3\xab5\xbc\xa0\x7f\xe85xk\x16\x1b\xa1V\xb9T\xf3`k\x842\x02\xa3\xcbR\xa0\xb1$q\xcb\xaf\x07\x9ek\x8f\xbbk\x96\xd3u\x90[Sk ,\xfc\x93\xa8#+o\xf3\x8e\xfcn\x00\xe3\x1b+O^\xbd\xd3\xad|[f\x9a\x93\xa1\x86m2\xea#\tR\xe6]\xd2C\xf2\x84\x00\x96$\x03\xc0\x07\xa1\xa0\x0e\x8ak\xe8-\xef-md\'\xcd\xb9,#\x00u\xda2s\xe9\xc5d\xb7\x8c\xf48\xf5&\xb1\x9a\xe6XeVt\xdf-\xb4\x89\x19*H8\x90\xae\xd3\xc8#\xaf^:\xd6E\x85\xc5\xb4>,\xd34\xd5\x9e\xe2{m>\xdekx\xeef\xe4\x19\xdfk,%\xbb\xba\xc4\xa7\xaf<\xf3\xcd`_5\xdaj\xf35\x8c\xef\x1b\xc9x\x913\xcdh$\x85\x1b\xed\xec\x14|\xc3\x0cO\x98_\n\xc1\x81\x8cr(Wn\xc8}\x1b;\xad\x1b\xc5\xba&\xbfq$\x1au\xf4sJ\x8c\xe3`\xea\xc1H\x05\x87\xaa\xe4\xf5\xa2o\x16\xe9\x10G\xe6I%\xd7\x95\xbd\x93\xccK9\x9d\t\x0eS\xef*\x91\xf7\x86\x07<\xf1\xea+\xcf|\t\x06\xaa\x9a\xac\xdaQ\xd4\xe7\x8d\xe4\xb0\xb9e\x90\xc8X\x163\xa8\xf3\xbc\xb33\x80\xc7,A\xda\x9c\x93\xc3rj\x9d\xed\x93\xc9\xa6\xe8\xb1y>s\\i\xba|v\xeaV6fa3o\xc6\xf6\x07?:\xe7\x19\xff\x00k\x03\x9amh\x9fqug\xaa\x9f\x10\xe9\xc9b\xd7\x92=\xc40+\xec&kYc9\xc6~\xeb(8\xc7|b\x96\xcf_\xd3\xef\xda\xd8[\xbc\xc7\xed;\xbc\x93$\x0f\x18p\xa0\x12F\xe020\xc3\x07\xa1\xed\\\xa7\xd8n\xf4\xcf\x0c\xb5\xa4\xf0\xdfE=\xe5\xf3\xa5\xbc\x16\x92E\x19;\x90\xe07\xcd\xb4/\xcax\x06\x99\xe1\xc1$:\xb6\x8fe8\xbdK\x9b\x11-\xb4\xf1\xddJ\xae\x15\x84\x117\xc8T\x91\xb7\x0e)\x01\xda_j\xf6:d\x88\x97\x93\xf9%\xd1\xddK)\xc1\x082\xc0\x1cc8\xc9\xc7R\x01\xc0\xe0\xd5(\xfcW\xa4\xc9,q\x86\xbdC#\xa4j\xd2i\xf3\xa2\xeer\x02\x82\xcc\x80\x0c\x92\x00\xc9\xefX^/\xd4c\x8a\xdd.\x97T\xcd\x85\xe5\x95\xca\x88\xd8\xa7\x94H\x88\xed*q\xbb$\x9f_\xc2\xb9\xabr\x06\xbc\xdf\xbc\x1ed\xb7\x96\xe1\xd3\xb8\xf2\xaf!C\x91\xe6\x12\xb9/\xc6G8\xe3\x14\x01\xe8\xef\xe2=!d\xb8\x89o\x16Y\xad\xf3\xe6\xc5\x02\xb4\xb2.\x18)\xf9T\x12pH\x07\x03\x8a\x93N\xd6\xecuY\xe6\x82\xd5\xe6\xf3aUy\x12ky"!X\x90\xa7\x0e\xa3 \xedn\x9e\x86\xbc\xfa\xe2\xea\xda\xe2{\xed>;\xc8\x04\xe6=V\x19S%\xcca\xee\xe3\xe1\x95\x01a\x95\xce8\xae\x87\xc3\xda\x8d\xd5\xcf\x8a\xae^u\xb6e\xbd\xb5,\xad\x0f\x98\x0c~IA\xb4\x87U<\xf9\xc4\xe6\x80:\x1dO\\\xd34c\x00\xd4/a\xb7\xf3\xdc"y\x8e\x17\'\xd7\x9e\xdd9\xed\x91U\x1f\xc6>\x1c\x8e\xf9l\xdb\\\xd3\xc4\xa5X\xff\x00\xc7\xca`\x15 \x15\'<6ON\xbc\x1fJ\xc7\xf1\xeb\xde\x85\xd3\xe1\xb3\x95\xd0\xdd;[0KV\x94\xb0q\xf3c\x0e\xb8!C0\xe0\x9f\x97\x829\xae^\xf6\xefR\x8f\xc6P\xac\xb3O\xe6oh\xcd\xda]\xbcp\xc7\xbaH\x0e\xd2\x9c\xed\x18*\xa5rF]rx\xa0\x0fJ\x97_\xd2`\xbe6R\xea6\xc9t\xb9\xccM \x0c07t\xfasQ\xe9^$\xd25\xb9\x0cv\x17\xb1\xcb(\xde|\xb0~b\xaa\xdbKc\xfb\xb9\xc6\x0f\xa1\x1e\xb5\xcb\xf8\x9a\xe1\xbf\xe1*\x8e\xc2{\xe4\xfb\x1f\x95-\xd02p-\xe50I\x1a\xa360\x15\x81w\x19\xe7(\xde\xa2\x99\xe1\x8b\xc0\xba\xe5\x91\xdbo*H\x8dj\x86\xda\xecJ\xb11\x8c;\x921\xfcF\x10x\xc0\x1e\x99$\xd0\x07\xa0QP\xc1wmt\xd2\xad\xbd\xc42\xb4M\xb2A\x1b\x86(\xde\x87\x1d\rI,\xb1\xc3\x13\xcb+\xacq\xa0,\xce\xc7\x01@\xeaI\xed@\x0e\xa2\xa3\x82xnaI\xa0\x95%\x89\xc6U\xe3`\xca\xc3\xd8\x8e\xb4\xdb\x9b\xbbk5F\xba\xb8\x86\x05v\x08\xa6W\n\x19\x8f@3\xde\x80&\xa2\x8a\x84\xdd\xdb-\xda\xda\x1b\x88E\xcb.\xf1\tq\xbc\xaf\xae\xde\xb8\xa0\t\xa8\xa2\xa1\x82\xee\xda\xe9\xa5[{\x88eh\x9bd\x827\x0cQ\xbd\x0e:\x1a\x00\x9a\x8al\xb2\xc7\x0cO,\xae\xb1\xc6\x80\xb3;\x1c\x05\x03\xa9\'\xb56\t\xe1\xb9\x85&\x82T\x96\'\x19W\x8d\x83+\x0fb:\xd0\x04\x94QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00g\xb6\x89b\xfa\x89\xbex\x8bO\xe7,\xdc\xb9\xdb\xbdS`8\xe9\xc0?\xd6\xac[\xd9\xc3k-\xd4\xb1)\x0fs/\x9d)\'9m\xaa\x99\xf6\xe1\x16\x8a(\x03.O\x08\xe8\xb2\xc3k\x0b\xdbHR\xd5\xa5x\x80\x9eE\xc1\x91\xb7?!\x819>\xb5\x7fK\xd2\xac\xf4k?\xb2X\xc6\xd1\xc3\xe6<\x9bY\xd9\xce\xe6%\x89\xc9$\xf5&\x8a(\x07\xa8\xcdKF\xb6\xd5^#t\xf7\x068\xd87\x94\x932#\x90\xc1\x86\xe5\x07\xe6\xe4\x0e\xb5jkXn\x03\xefO\x99\xa31\x99\x14\xedp\xa7\xa8\x0c9\x1f\x81\xa2\x8a\x00\xac\x9a&\x9b\x1e\x9d\x0e\x9f\x1d\x9cik\x0b\xac\x91\xc6\x9cme`\xc1\xb29\xceFs\xdf\xbfZ\xafw\xe1}\x1a\xfe4\x8e\xf2\xc9n#G\x96EIX\xb2\x87\x90\xeef\x00\x9f\xbd\x92pz\xaeN1E\x14\x00i\xbe\x1a\xd3\xb4\x9b\xbf\xb4\xda\x9b\xdf3iLM}4\xab\x8f\xf7]\xc8\xfd*!\xe1\r\x14\xc7\x0cr\xdb<\xe9\x04k\x1c\x0b4\xce\xc2\x10\x00\x00\xa0\xce\x15\xb8\xfb\xc3\x07\xde\x8a(\x02I<3\xa7\xcfh\xb6\xb7\x06\xee\xe2\x14\x98L\x82k\xb9\x1c\xab\x00@\xc3\x16\xdd\x8eOz\x88xCG@|\xa8\xeeao8\xce\x1e+\xa9Q\xc3\x14T?0l\xe0\xaa\xa8\xc6q\xc5\x14P\x05\xa9\xbc=\xa4\xdci\xf6\xf62\xd9F\xf6\xf6\xf1\xf9P\xa9\xc9(\x98\x00\x80z\xf2\x06\x0f\xa8\xcez\x9a\x92\xf3G\xb3\xbe\x9e\xdeY\x91\xb3\x04\xa2P\x11\xca\x86`C)`>\xf6\x08\x04g\xb8\xa2\x8a\x00\xb3\x1d\xa5\xb4/\xbe+x\x91\xf2\xe7r\xa0\x07\xe6;\x9b\xf3<\x9fSU,tKK\x0b\xb9.\xe3k\x89n$]\x86K\x8b\x87\x94\x85\xcev\x8d\xc4\xe0g\xd2\x8a(\x02\xc4\x966\xf2\xdf\xc3{"\x16\x9e\x05e\x88\x968]\xddH\x1d3\x8e3\xd7\x19\x1d\xea\xb3h\x1ac\x80\xa6\xce?(C,\x06,|\x85$eg\xc8\xeeIPs\xf5\xa2\x8a\x00\xb1\x16\x9bg\x0bL\xc9n\x9b\xa6\x94L\xe5\x86\xe2\\\x00\x01\xe7\xd0(\xc7\xa68\xa6\x1d.\xdd\xb5A\xa8\xbbL\xf3\xa8"0\xd2\xb1H\xf20J\xaep\t\x1d\xf1\xeb\xeah\xa2\x80\x12\xc3I\xb5\xd3e\x9aKp\xfb\xa5\x01N\xf7-\xb5Ab\x14g\xa0\x05\xd8\xfe?J\xb1wk\x15\xf5\xa4\x96\xd3\x82c\x90`\xe0\x90~\xa0\x8e\x86\x8a(\x01\xb6VqXZ\x8bxw\x15\x0c\xceK\xb6K31f$\xfa\x92I\xfcj\x1dOI\xb5\xd5\xa3X\xee\x83\xe1C\x0f\x91\xca\xe5Xa\x94\xe3\xb1\x1c\x1a(\xa0\x0b\xd5E\xb4\x9bW\xd5\x13Q!\xfc\xe5;\x80\xdev\xee\nT6=v\xb3\x0f\xc7\xe9E\x14\x01z\xa8\xd8i6\xbal\xb3In\x1ft\xa0)\xde\xe5\xb6\xa8,B\x8c\xf4\x00\xbb\x1f\xc7\xe9E\x14\x01b\xee\xd6+\xebI-\xa7\x04\xc7 \xc1\xc1 \xfdA\x1d\r6\xca\xce+\x0bQo\x0e\xe2\xa1\x99\xc9v\xc9ff,\xc4\x9fRI?\x8d\x14P\x05\x8a(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80?\xff\xd9'
    

    4.4.4 如何看到图片呢?

    from PIL import Image
    im = Image.open('评论信息/76936090/39018468.jpg')
    im.show() # show完之后会新打开一个窗口 显示图片的内容
    

    4.4.5 单独测试看图片的内容

    4.4.5.1 单个文字

    image = get_file_content('评论信息/76936090/39018468.jpg')
    tag1 = client.basicGeneral(image, options)
    tag1
    
    {'log_id': 6412010709116467009,
     'words_result': [{'words': '价格可以随便乱调吗辣'}],
     'words_result_num': 1}
    
    tag1['words_result'][0]['words']
    
    '价格可以随便乱调吗辣'
    

    4.4.5.2 多文字

    image = get_file_content('评论信息/83588699/50366237.jpg')
    tag2 = client.basicGeneral(image, options)
    tag2 
    
    {'log_id': 4713844365475263073,
     'words_result': [{'words': '招牌挺文艺小清新的不知道为什么没人拍过来'},
      {'words': '这家有瘦肉丸卤味啊盖浇饭这些'},
      {'words': '点了瘦肉丸挺好吃的肉没有添加剂的味道还不错的'},
      {'words': '打包了鸭骨架老板还贴心的给切成块味道也很好'},
      {'words': '尤其是酱油醋很好吃'},
      {'words': '就在新城那个叫什么源路的贝贝佳对面门面有点小但是仔细看不会错过的'},
      {'words': '收起评论入'}],
     'words_result_num': 7}
    
    im2 = Image.open('评论信息/83588699/50366237.jpg')
    im2.show() # show完发现评论是有多行的 所以根据这个API调用是一行一行的解析 并存储
    
    for i in range(len(tag2['words_result'])):
        print(tag2['words_result'][i]['words'])
    
    招牌挺文艺小清新的不知道为什么没人拍过来
    这家有瘦肉丸卤味啊盖浇饭这些
    点了瘦肉丸挺好吃的肉没有添加剂的味道还不错的
    打包了鸭骨架老板还贴心的给切成块味道也很好
    尤其是酱油醋很好吃
    就在新城那个叫什么源路的贝贝佳对面门面有点小但是仔细看不会错过的
    收起评论入
    

    结论:

    • 可以看到返回的是一个字典,然后针对单个文字以及多文字的时候得采用不同的方式
    • 多文字的时候得进行一个循环遍历所有的评论 然后拼接起来 这是一个坑!之前就是不清楚的!所以会发现,诶,评论为啥是不全的!所以还是得深入的了解到数据结构!要知道返回的结果是啥!

    4.5 批量的去转图片为文字,并且存在数据框里

    思路:

    • 方法还是上面单个测试的一样,但得需要新增两部分,也就是读取图片 + 存储到数据框的部分
    • 读取图片:进行一个循环遍历即可!

    步骤:

    1. 遍历每一个文件夹 然后对文件夹下面的图片做转换
    2. 由于原来是形成一个字典 最后再形成数据框 现在估计这样够呛了 每次一个文件夹内转完就形成一个数据框 最后合并起来
    3. 这样每次就都定义一个新的空的字典
    4. 同时多加一列:商户号 最后再添加,先增加每一行都不一样的内容,最后再增加所有的!都是这个思路
    5. 定义一个空列表 用来存放每一个商户的三列信息

    合理避坑:

    • 就是注意mac会出现那个啥’.DS_Store’ 所以先把这个给排除掉
    • 注意区分continue和break
    # 读取评论信息下面所有文件夹的名称
    mer_folds = os.listdir('./评论信息/')
    
    comment_dp = []
    t0_all = time.time()
    
    for i in range(0, len(mer_folds)):
    
        fold = mer_folds[i]
    
        print('正在转换第 %d 个商家' % (i+1))
        t0 = time.time()
        # 定义一个空的字典 用来存放图片名称+转换后文字的内容
        image_tag = {}
        # 定位到某一商户对应的所有评论信息图片的文件夹里面
        if fold == '.DS_Store':
            continue
        else:
            pics = os.listdir('./评论信息_补充/' + str(fold))
            for pic in pics:
                # 针对mac系统的隐藏文件
                if pic == '.DS_Store':
                    continue
                else:
                # 遍历某一商户下所有图片
                    print('正在转换商家 %s 评论图片: %s' % (fold, pic))
                    try:
                        image = get_file_content('./评论信息_补充/' + str(fold) + '/' + str(pic))
                        tag = client.basicGeneral(image, options)
                        # 先定义一个空的字符 用于后面的拼接
                        comments = ''
                        # 进行判断 如果只识别出一个来 就直接赋值
                        if tag['words_result_num'] == 1:
                            image_tag[pic] = tag['words_result'][0]['words']
                        # 如果不止一个 进行循环 然后拼接评论
                        else:
                            for i in range(tag['words_result_num']):
                                comments = comments + tag['words_result'][i]['words'] + ' '
                            image_tag[pic] = comments
    
                        time.sleep(1)
                    except Exception as e:
                        print('报错信息为: ', e)
          
    
        # 此时一个商家的图片全部转换ok
        t1 = time.time()
        print('点评商家 %s 所有评论图片转换完毕, 所需时间为 %.2f s' % (str(fold), (t1 - t0)))
        # 先把这部分数据给存起来 形成数据框
        a = []
        b = []
        for k,v in image_tag.items():
            a.append(k)
            b.append(v)
        y = pd.DataFrame({
            '点评评论截图名称':a,
            '百度识别评论结果':b
        })
        y['商户号'] = fold
        comment_dp.append(y)
        
        # else:
        #     break
    
    # 输出所有的信息
    comment_dp_pd = pd.concat(comment_dp, axis=0)
    comment_dp_pd.to_csv('大众点评评论图片转文字结果.csv', encoding = 'utf-8', index = False, quoting = 1)
    
    t1_all = time.time()
    print('点评全部评论图片转换完毕,所需时间为 %.2f s' % (t1_all - t0_all))
    
    正在转换商家 76936090 评论图片: 39018468.jpg
    点评商家 76936090 所有评论图片转换完毕, 所需时间为 3.30 s
    正在转换商家 23060131 评论图片: 428069809.jpg
    正在转换商家 23060131 评论图片: 47855114.jpg
    正在转换商家 23060131 评论图片: 812661193.jpg
    正在转换商家 23060131 评论图片: 752038273.jpg
    正在转换商家 23060131 评论图片: 54695934.jpg
    正在转换商家 23060131 评论图片: 859952667.jpg
    正在转换商家 23060131 评论图片: 113265168.jpg
    正在转换商家 23060131 评论图片: 753526276.jpg
    点评商家 23060131 所有评论图片转换完毕, 所需时间为 14.83 s
    正在转换商家 66264063 评论图片: 19590086.jpg
    正在转换商家 66264063 评论图片: 189696824.jpg
    正在转换商家 66264063 评论图片: 776797215.jpg
    正在转换商家 66264063 评论图片: 52339564.jpg
    正在转换商家 66264063 评论图片: 980002346.jpg
    正在转换商家 66264063 评论图片: 756204408.jpg
    正在转换商家 66264063 评论图片: 812438020.jpg
    正在转换商家 66264063 评论图片: 177743748.jpg
    点评商家 66264063 所有评论图片转换完毕, 所需时间为 13.74 s
    正在转换商家 95358955 评论图片: 25910563.jpg
    点评商家 95358955 所有评论图片转换完毕, 所需时间为 1.54 s
    点评全部评论图片转换完毕,所需时间为 33.41 s
    

    5 封装成函数

    def PicToText(dir):
        # dir参数为照片存放的文件夹
        
        # 读取评论信息下面所有文件夹的名称
        mer_folds = os.listdir(dir)
    
        comment_dp = []
        t0_all = time.time()
    
        for i in range(0, len(mer_folds)):
    
            fold = mer_folds[i]
    
            print('正在转换第 %d 个商家' % (i+1))
            t0 = time.time()
            # 定义一个空的字典 用来存放图片名称+转换后文字的内容
            image_tag = {}
            # 定位到某一商户对应的所有评论信息图片的文件夹里面
            if fold == '.DS_Store':
                continue
            else:
                pics = os.listdir(dir + str(fold))
                for pic in pics:
                    # 针对mac系统的隐藏文件
                    if pic == '.DS_Store':
                        continue
                    else:
                    # 遍历某一商户下所有图片
                        print('正在转换商家 %s 评论图片: %s' % (fold, pic))
                        try:
                            image = get_file_content(dir + str(fold) + '/' + str(pic))
                            tag = client.basicGeneral(image, options)
                            # 先定义一个空的字符 用于后面的拼接
                            comments = ''
                            # 进行判断 如果只识别出一个来 就直接赋值
                            if tag['words_result_num'] == 1:
                                image_tag[pic] = tag['words_result'][0]['words']
                            # 如果不止一个 进行循环 然后拼接评论
                            else:
                                for i in range(tag['words_result_num']):
                                    comments = comments + tag['words_result'][i]['words'] + ' '
                                image_tag[pic] = comments
    
                            time.sleep(1)
                        except Exception as e:
                            print('报错信息为: ', e)
    
    
            # 此时一个商家的图片全部转换ok
            t1 = time.time()
            print('点评商家 %s 所有评论图片转换完毕, 所需时间为 %.2f s' % (str(fold), (t1 - t0)))
            # 先把这部分数据给存起来 形成数据框
            a = []
            b = []
            for k,v in image_tag.items():
                a.append(k)
                b.append(v)
            y = pd.DataFrame({
                '点评评论截图名称':a,
                '百度识别评论结果':b
            })
            y['商户号'] = fold
            comment_dp.append(y)
    
            # else:
            #     break
    
        # 输出所有的信息
        comment_dp_pd = pd.concat(comment_dp, axis=0)
        comment_dp_pd.to_csv('大众点评评论图片转文字结果.csv', encoding = 'utf-8', index = False, quoting = 1)
    
        t1_all = time.time()
        print('点评全部评论图片转换完毕,所需时间为 %.2f s' % (t1_all - t0_all))
        return comment_dp_pd
    
    # 只要加一个参数-文件夹路径即可!
    PicToText('评论信息')
    

    6 总结

    • 上述代码可以实现批量的从图片转为文字(调用百度云API接口),并且形成一个数据框,以供进行后续的分析
    • 读入图片的函数 get_file_content
    展开全文
  • 为了实现这种类似的button,左边文字,右边图片,或者是左边图片,右边图片 方法一:xib 设置属性 在xib button 上有个属性,Semantic,Force Right-to-Left ,Force Left-to-Right Force Right-to-Left 是图片在...
  •  < dx : ASPxHyperLink runat ="server" ID ="NewMail" RightToLeft ...aspxhyperlink中没有相关的设置,我把文字居右对齐,左边留出图片大小的宽度,用来实现同时显示图片和文字的效果。
  • 表单图片文字同时上传的解决方法

    千次阅读 2016-09-27 21:58:12
    1、我使用的是ServletFileUpload来实现同个form表单中图片和文字信息的同时上传(支持多文件上传),首先我们先看下前端JSP页面的实例代码: <input type = "text" name = "
  • 背景在有心课堂《自己动手写HTTP框架》课程中有下列课程:自拍要发朋友圈如何实现 http://stay4it.com/course/4/learn#lesson/208通过自己写的HTTP框架实现将图片和文字等内容在一个接口中提交到服务器。无论哪种...
  • 文字 +图片 滑动切换 展示特效 js javascript
  • 2021年前端面试题及答案

    万次阅读 多人点赞 2020-02-11 19:29:34
    此外对于图片的处理可以使用压缩函数或resize函数,处理图片同时破坏其包含的HTML代码; 3. 使用随机数改写文件名文件路径,使得用户不能轻易访问自己上传的文件; 4. 单独设置文件服务器的域名; 前端跨越问题 ...
  • ...本文大家重点讨论一下DIV+CSS居中之图片文字同排垂直居中 ...未设置文字和图片在同排同行时候上下垂直居中时,CSS实例图片如下: 说明: 以上“www.divcss5.com”为divcss5网网
  • 但是业务需要上传商品是文本和图片同时上传的。   这里要用到commons的四个包,我用Maven导入 <!-- https://mvnrepository.com/artifact/commons-io/commons-io有关图片文本同时上传 --> <groupId>...
  • 原文标题:识文精灵(ocrwiz):如何把在线文字识别(图片文字)OCR的互动体验提升到极致 截图——&gt;粘贴图片(Ctrl+V)——&gt;拷贝结果(Ctrl+C),只需要几秒钟,就可以快速识别并得到图片中的文字,体验...
  • PHP实现图片文字/图案水印

    万次阅读 2017-03-29 18:43:37
    思路:二维码头像相当于往图片上添加图片,个人姓名联系方式相当于玩图片上添加文字,这就是文字/图案水印了。思路就是上网百度!!历经辛苦,找到一篇看起来可能会明白,简洁,简短的文章:...
  • 该按钮可以任意摆放图片和文字位置距离,同时可以用QSS设置按钮内图片文字、整个按钮的样式表效果,也就是说,可以实现鼠标划过、鼠标选中等样式表,跟原来QPushbutton的样式表效果一模一样! 效果图 源代码...
  • DIV+CSS居中之图片文字同排垂直居中未设置文字和图片在同排同行时候上下垂直居中时,CSS实例图片如下: 说明: 以上为图片,后面跟着是文字段,可见虽然图片文字在同行,但是文字未上下垂直居中,明显图片...
  • 小甲鱼零基础入门学习python笔记

    万次阅读 多人点赞 2019-08-14 11:06:30
    脚本语言另有一些属于脚本语言的特性: • 语法结构通常比较简单 • 学习使用通常比较简单 • 通常以容易修改程序的“解释”作为运行方式,而不需要“编译” • 程序的开发产能优于运行性能 一个脚本可以...
  • android开发 之 Canvas绘制文字图片

    万次阅读 2017-08-02 17:22:26
    依次为 绘制文字、绘制文字时指定每个文字位置、根据路径绘制文字 绘制路径 drawPath 绘制路径,绘制贝塞尔曲线时也需要用到该函数 顶点操作 drawVertices, drawBitmapMesh 通过对顶点操作可以使图像形变,...
  • 前面几节讲了图片上画线 这一节 我们简单讲一讲 给图片上添加文字的方法 我们继续使用上节...首先我们将添加文字的View单独抽象出现实现 创建一个类 继承自UIView 起名: AddText 定义一个协议 当输入完成之后 将内
  • 微信图片文字的方法有哪些

    千次阅读 2018-11-07 09:20:56
    工作中很多人都会接触到图片文字需要再利用的情况,入股图片文字少的话可以直接手敲下来,要是文字过多的话该怎么办呢?其实手机微信里的小程序都可以直接将图片文字转换出来,还可以翻译,具体方法如下: 1.把手机...
  • 前端面试题

    万次阅读 多人点赞 2019-08-08 11:49:01
    前端面试题汇总 一、HTMLCSS 21 你做的页面在哪些流览器测试过?...它Standards模式有什么区别 21 div+css的布局较table布局有什么优点? 22 img的alt与title有何异同? strong与em的异同? 22 你能...
  • 很多时候,在页面中会遇到图标与文字混排的情况,用 vertical-algin: middle 并不能让图片完全对齐于文字。 目的是达成这种效果:(这并不是用 vertical-align 实现的) 先看一下用 vertical-align 的样子 ...
  • 相比给视频增加文字水印,图片水印相对简单一些。具体原因后面我会说明。 在视频右下角的添加图片水印 ffmpeg -i 仓库实景.mp4 -vf "movie=wenzi.png[watermark];[in][watermark] overlay=main_w-overlay_w-10:...
  • 里面用到了非标准的工具来实现按钮和文字同时显示。   可是最近我发现,在VS自带的属性框中,将按钮的“ICON”属性设置为False,并将Caption修改为要显示的文字 然后通过 ControlResetButton.SetIcon(::...
  • 纯div+css实现第一张图片没有文字内容,鼠标悬停时出现第二张图那样效果 使用div css实现鼠标悬停图片上方时显示文字内容原理: 首先我们设置一个盒子对象,并且将图片使用style标签内设置为CSS背景图片同时...
  • 下面是《Android Studio开发实战 从零基础到App上线(第2版)》一书用到的工具代码资源: 1、本书使用的Android Studio版本为3.2,最新的安装包可前往Android官网页面下载。 2、本书使用的Android NDK版本为r17,...
  • 近期总结一一些面试题 都是企业的面试题笔记题 感觉薪资10k下的都会出笔试题 ...同时分享一个自己录制的CSS3动画特效经典案例【推荐教程】--后期会更新vue框架 微信小程序等内容。 https://ke.qq.com/cou...
  • 移动端app开发,原生开发与混合开发的区别

    万次阅读 多人点赞 2019-09-26 18:47:01
    目前市场上主流的APP分为三种:原生APP、Web APP(即HTML5)混合APP三种,相对应的定制开发就是原生开发、H5开发混合开发。那么这三种开发模式究竟有何不同呢?下面我们就分别从这三者各自的优劣势来区分比较吧...
  • CSS 使-图片文字同排垂直居中

    千次阅读 2017-03-06 16:40:54
    CSS 使-图片文字同排垂直居中

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,518
精华内容 43,807
关键字:

如何让图片和文字同时出现