2020年10月

Python使用QRCode生成二维码,qrcode会依赖Image这个包,所以我们首先安装qrcode和Image:

pip install qrcode
pip install Image
  • 首先我们来写一个最简单的案例,生成一个内容为hello sunxiaoning的二维码,​保存到本地,执行以下脚本,就可以生成一个hello.png的文件,并且自动打开。我们扫描之后就可以看到二维码里面的内容了。是不是很简单啊,​人生苦短,我用python。

    import qrcode 
    img = qrcode.make('hello sunxiaoning')
    # 保存二维码
    img.save('hello.png')
    # 展示二维码
    img.show()
  • 我们在来设置一个中间带有头像的二维码,我们要先安装下Pillow。使用pip install Pillow即可。

    import qrcode
    from PIL import Image
    qr = qrcode.QRCode(
            version=1,
            error_correction=qrcode.constants.ERROR_CORRECT_H,
            box_size=5,
            border=4,
        )
    
    # 添加数据
    qr.add_data('Hello sunxiaoning')
    # 填充数据
    qr.make(fit=True)
    # 生成图片
    img = qr.make_image(fill_color="orange", back_color="white")
    
    # 添加头像,打开头像照片
    icon = Image.open("1.jpeg")
    # 获取图片的宽高
    img_w, img_h = img.size
    # 参数设置头像的大小
    factor = 6
    size_w = int(img_w / factor)
    size_h = int(img_h / factor)
    icon_w, icon_h = icon.size
    if icon_w > size_w:
        icon_w = size_w
    if icon_h > size_h:
        icon_h = size_h
    # 设置头像的尺寸
    icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
    
    w = int((img_w - icon_w) / 2)
    h = int((img_h - icon_h) / 2)
    # 粘贴头像
    img.paste(icon, (w, h), mask=None)
    # 保存img
    img.save('hello.png')
    # 展示二维码
    img.show()

参数详解

  • version 控制二维码的大小,取值范围从1到40。取最小值1时,二维码大小为21*21。取值为 None (默认)或者使用fit=true参数(默认)时,二维码会自动调整大小。
  • error_correction控制二维码纠错级别。

    • ERRORCORRECTL大约7%或者更少的错误会被更正。
    • ERRORCORRECTM默认值,大约15%或者更少的错误会被更正。
    • ERRORCORRECTQ大约25%或者更少的错误会被更正。
    • ERRORCORRECTH大约30%或者更少的错误会被更正。
  • box_size控制二维码中每个格子的像素数,默认为 10。
  • border控制二维码四周留白包含的格子数,默认为 4。
  • image_factory选择生成图片的形式,默认为 PIL 图像。
  • mask_pattern选择生成图片的的掩模。

方法详解

  • add_data(str,optimize=20) 添加要转换的文字到data参数;如果使用了optimize优化参数,数据将被拆分为多个块来进行优化,以找到一个长度至少为这个值的足够简洁的方式来生成二维码。设置为“0”以避免优化。
  • make(fit=True)当fit参数为真或者没有给出version参数时,将会调用bestfit方法来找到适合数据的最小尺寸。如果没有设置maskpattern,将会调用bestmaskpattern方法来找到找到最有效的掩模图案。最后将这些数据传递给makeImpl方法来生成二维码。与qrcode本体的make方法不一样的是,这个方法没有任何返回值。
  • makeimage(fillcolor=None, backcolor=None,imagefactory=None):创建二维码的图像并返回,默认为 PIL 图像。可以在这里设置二维码的颜色。
  • clear 清空所有数据。
  • get_matrix 返回二维码数组。
  • print_ascii(out=None, tty=False, invert=False)可以用字符画的形式来输出二维码,但是需要注意的是扫的时候不一定可以扫出来,谨慎使用。

对于熟悉SEO的小伙伴都很清楚,静态网站的收录以及排名都比较好使。我们使用PHP开发网站的时候一般都使用的是伪静态,有些开源的程序都基本上可以开启伪静态,那么我们自己写的呢,怎么实现呢,小编今天在这里总结下TP3.2实现伪静态。

首先在使用大U方法进行传参的时候不要直接{:U('test')}?id=1这么写,我们要按照手册里面的写法去书写{:U('test',array('id'=>1))},这时候你就会发现直接是.html结尾了。

接下来我们要去除的是index.php

首先我们在网站的根目录里面新建.htaccess这个文件,记得前面有个点哦。然后填上以下内容。

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

再然后我们打开项目的配置文件把URL_MODEL 改为 2,也就是 'URL_MODEL'=>'2'

最后我们就完美实现了。

今天小编给大家介绍一个有趣的事情,让代码开口说话,简单点说就是python利用pyttsx3实现文字转语音。感觉还是蛮有趣的,并且支持中文哦。

  • 首先我们先安装pyttsx3

    pip install pyttsx3
  • 如果是windows操作系统,并且未安装pywin32, 需要安装pywin32

    pip install pywin32
  • 我们首先让代码说句Hello World,然后再说句中文

    import pyttsx3 
     
    # 模块初始化
    engine = pyttsx3.init() 
    print('准备开始语音播报...')
    engine.say('Hello World')
    engine.say('孙肖宁')
    # 等待语音播报完毕, 不写这个是不可以的哦
    engine.runAndWait()

    是不是很简单呢

  • 我们还可以进行语速控制、音量控制、更换发音人声音

    import pyttsx3
    
    # 模块初始化
    engine = pyttsx3.init()
    print('准备开始语音播报...')
    
    # 语速控制,默认值为200
    rate = engine.getProperty('rate')
    engine.setProperty('rate', rate - 50)
    # 音量控制,范围为0.0-1.0
    volume = engine.getProperty('volume')
    engine.setProperty('volume', 0.6)
    # 添加朗读文本
    engine.say('窗前明月光,疑是地上霜。')
    
    # 等待语音播报完毕
    engine.runAndWait()
  • 我们再来说下更换发音人的声音,目前中文仅支持3种

    • 普通话: com.apple.speech.synthesis.voice.ting-ting.premium
    • 粤语 :com.apple.speech.synthesis.voice.ting-ting.premium
    • 台湾女生普通话: com.apple.speech.synthesis.voice.mei-jia

      import pyttsx3
      
      # 模块初始化
      engine = pyttsx3.init()
      volume = engine.getProperty('volume')
      
      # 普通话发音
      voices = engine.setProperty(
      'voice', "com.apple.speech.synthesis.voice.ting-ting.premium")
      
      # 标准的粤语发音
      # voices = engine.setProperty(
      #       'voice', "com.apple.speech.synthesis.voice.sin-ji")
      
      # 台湾女生普通话发音
      # voices = engine.setProperty(  
      #     'voice', "com.apple.speech.synthesis.voice.mei-jia")
      print('准备开始语音播报...')
      # 输入语音播报词语
      engine.setProperty('volume', 3)
      engine.say("窗前明月光,疑是地上霜。举头望明月,低头思故乡。")
      
      engine.runAndWait()
      engine.stop()
      另外你可以尝试查看内置的其他声音,遍历下面的voices即可
      voices = engine.getProperty('voices')
      engine.setProperty('voice', voices[0].id)

python利用pyttsx3实现文字转语音   .jpg
详解

  • 语音引擎工厂类似于设计模式中的“工厂模式”,pyttsx3通过初始化来获取语音引擎。当我们第一次调用init操作的时候,会返回一个pyttsx3的engine对象,再次调用的时候,如果存在engine对象实例,就会使用现有的,否则再重新创建一个。
    pyttsx.init([driverName : string, debug : bool]) → pyttsx.Engine
    从方法声明上来看,第一个参数指定的是语音驱动的名称,这个在底层适合操作系统密切相关的。如下:

    • drivename:由pyttsx3.driver模块根据操作系统类型来调用,默认使用当前操作系统可以使用的最好的驱动。

      • sapi5 - SAPI5 on Windows
      • nsss - NSSpeechSynthesizer on Mac OS X
      • espeak - eSpeak on every other platform
    • debug: 要不要以调试状态输出,开发阶段可以设置为True。

函数说明

  • connect()在给定的topic上添加回调通知

    • 参数:

      • topic(string):要描述的事件名称;
      • cb(callable):回调函数。
    • 返回值: dict
  • disconnect()结束连接

    • 参数:

      • token(dict):回调失联的返回标记
    • 返回值: Void
  • endLoop()简单来说就是结束事件循环
  • getProperty()获取当前引擎实例的属性值

    • 参数:

      • name(string):rate: 每分钟字数的语音速率,默认为每分钟200个。
      • name(string):voice: 语音的字符串标识符。
      • name(string):voices: pyttsx3.voice.Voice描述符对象列表。
      • name(string):volume:音量的大小。
    • 返回值: Object
  • setProperty()获取当前引擎实例的属性值

    • 参数:

      • name(string):rate: 每分钟字数的语音速率,默认为每分钟200个。
      • name(string):voice: 语音的字符串标识符。
      • name(string):volume:音量的大小。
      • value(int):rate: 设置每分钟读的字数。
      • value:voice:设置发音,后文中会再讲到。
      • valu(float):volume:设置音量大小,0.0-1.0之间;默认1.0。
    • 返回值: Object
  • say()预设要朗读的文本数据

    • 参数:

      • text(unicode):要进行朗读的文本数据。
      • name(strin):关联发音人(一般用不到)
  • runAndWait()当事件队列中事件全部清空的时候返回
  • startLoop()开启事件队列

    • 参数:

      • [useDriverLoop(bool)]:是否启用驱动循环。
  • stop()停止当前讲话并清除命令队列。

mac.jpg
我们发现在Linux操作系统下我们可以使用ll来查看文件夹里面的内容,而在mac系统下不可以,用惯了这个命令,我们可以自己修改下快捷命令,使用ll来替代原本的ls -alh,另外我们还可以根据自己需要添加不同的命令,比如la来替换ls -a等。
操作方法:

  • 使用vim编辑器打开~/.bash_profile如果没有,会自动创建。
    vim ~/.bash_profile
  • 按照以下格式输入

    alias ll='ls -alh'
    alias la='ls -a'
    alias l='ls -cf'
    alias ipython='python3 -m IPython'
  • 保存之后,执行source ~/.bash_profile

最后你再执行ll就不会报错了。

在微信小程序里面如果想引用地图,那么可以直接使用map组件,详细的使用方法呢大家可以看下小程序的开发文档,小编这里主要说下小编遇到的问题。
你可以自定义主题,搜索腾讯地图,登录后,选择左侧的自定义样式,然后再输入小程序的APPID,这样你就可以获取到KEY值了。然后指定自定义属性:subkey就可以了。
另外小编再说下汽包的使用吧。这就用到了markers属性,markers是一个数组的形式,你可以看下文档,设置相对应的属性。另外呢,气泡有两种模式:callout和label。callout当用户点击的时候显示标注的content内容,label是默认直接显示的,用法两者相同。
使用案例

 markers = [{
        '_id': 1,
        'name': '',
        'iconPath': '',
        'width': 20,
        'height': 20,
        'longitude': 111.1111,
        'latitude': 32.1111,
        'callout': {    // 可以是label
            'content': '小宁博客',
            'borderColor': '#f4f4f4',
            'color': '#ffffff',
            'bgColor': '#000000',
            'borderRadius': 10,
            'padding': 10
        }
        ....
   ]

小编今天在使用brew安装东西的时候,出现了brew command not found这样的错误。很奇怪,之前都是很容易就解决了的。小编在这里说下解决办法。
方法一:
命令行执行以下命令,不过国内好像有点问题,因为raw.githubusercontent.com这个网站被墙了,无法访问,会出现443的错误,所以建议使用方法二

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

方法二:
换源,然后根据提示操作就可以了。

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"