相信大家都知道mathpix吧

一款特别的牛逼的img2latex软件

如果有小伙伴不知道的话可以看我之前的博客

超级利器——mathpix 文本、图片公式转md/latex格式

牛逼虽说是牛逼,但是对于普通的用户来说每个月只有50次免费的机会

剩下的还得靠克金……

让我们看一下官网的价格

虽说这几天美元贬值,但是算下来还是得每月二三十

像我这样节俭的人

……对,我就是穷,能把我咋滴( ﹁ ﹁ ) ~→

但是官方还是非常友好的,开放了API,让像我这样的开发者(qb)有了机遇

看一下API的价格

每个月前1000次免费!!!

这对于普通人来说真的够用了

下面我通过调用官方给出的API写了个精简版的mathpix snipping

效果

功能如下

  • ALT+T 快捷键开始转换
  • ALT+C 复制转化为后的latex公式
  • 上面部分可以将剪切板中图片显示出来

本来还写了latex2img的部分,但是运行的不太稳定

已经把那部分注释掉了,思路是用matplotlib中的自带的显示latex公式,然后将横纵坐标轴去掉

plt.text然后调整一下文字的显示位置和文字的大小等属性

话不多说直接上动画

看起来效果还不错

下面就是教学时间了

一、注册API接口账号

先注册一个mathpix的账号

https://dashboard.mathpix.com/login

然后需要接受一个激活的协议

下面就是输入信用卡激活了

之后就可以看到账户的信息啦

这两个我们待会要用到

接下来就要调用接口了

这里给出官方的接口文档https://docs.mathpix.com

还有有一些API的示例

https://github.com/Mathpix/api-examples

二、敲代码

我用的是python实现的,用pyqt5 做UI界面,再用qss加了一定的美化

结构目录

用到的包

import sys
import os
import base64
import requests
import json
import PyQt5.QtGui
import PyQt5.QtCore
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QWidget, QGridLayout, QLineEdit
from PyQt5.QtCore import Qt
from PIL import ImageGrab
import pyperclip
import matplotlib.pyplot as plt

核心代码

env = os.environdefault_headers = {'app_id': env.get('APP_ID', '你的APP_ID'),'app_key': env.get('APP_KEY', '你的APP_KEY'),'Content-type': 'application/json'
}service = 'https://api.mathpix.com/v3/latex'
     ## Return the base64 encoding of an image with the given filename.#def image_uri(self,filename):image_data = open(filename, "rb").read()return "data:image/jpg;base64," + base64.b64encode(image_data).decode()# Call the Mathpix service with the given arguments, headers, and timeout.def latex(self,args, headers=default_headers, timeout=30):r = requests.post(service,data=json.dumps(args), headers=headers, timeout=timeout)return json.loads(r.text)def convert(self):r = self.latex({'src':self.image_uri(r".\img\equa.png"),'formats': ['latex_simplified']})print(r['latex_simplified'])latex1 = r['latex_simplified']latex2 = '$' + latex1 + '$'latex3 = '$$' + latex1 + '$$'self.Latex1Edit.setText(latex1)self.Latex2Edit.setText(latex2)self.Latex3Edit.setText(latex3)## 识别剪贴板公式#def grapclipboard(self):im = ImageGrab.grabclipboard()im.save(r'.\img\equa.png', 'PNG')self.imgLable.setPixmap(PyQt5.QtGui.QPixmap(r'.\img\equa.png'))

完整代码

# coding:utf-8
import sys
import os
import base64
import requests
import json
import PyQt5.QtGui
import PyQt5.QtCore
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QWidget, QGridLayout, QLineEdit
from PyQt5.QtCore import Qt
from PIL import ImageGrab
import pyperclip
import matplotlib.pyplot as pltenv = os.environdefault_headers = {'app_id': env.get('APP_ID', '你的APP_ID'),'app_key': env.get('APP_KEY', '你的APP_KEY'),'Content-type': 'application/json'
}service = 'https://api.mathpix.com/v3/latex'class Img2Latex(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 800, 700)self.setWindowTitle('Img2Latex')# copy latexself.Latex1copyBtn = QPushButton()self.Latex2copyBtn = QPushButton()self.Latex3copyBtn = QPushButton()# set copy btn iconself.Latex1copyBtn.setIcon(PyQt5.QtGui.QIcon(r".\img\copy.png"))self.Latex2copyBtn.setIcon(PyQt5.QtGui.QIcon(r".\img\copy.png"))self.Latex3copyBtn.setIcon(PyQt5.QtGui.QIcon(r".\img\copy.png"))# edit latexself.Latex1EditBtn = QPushButton()self.Latex2EditBtn = QPushButton()self.Latex3EditBtn = QPushButton()# set edit btn iconself.Latex1EditBtn.setIcon(PyQt5.QtGui.QIcon(r".\img\edit.png"))self.Latex2EditBtn.setIcon(PyQt5.QtGui.QIcon(r".\img\edit.png"))self.Latex3EditBtn.setIcon(PyQt5.QtGui.QIcon(r".\img\edit.png"))# img to latex convert btnself.img2latexBtn = QPushButton('convert')# show the picture on clipboardself.imgLable = QLabel()# show the formula in latexself.Latex1Edit = QLineEdit()self.Latex2Edit = QLineEdit()self.Latex3Edit = QLineEdit()self.Latex1Edit.setEnabled(False)self.Latex2Edit.setEnabled(False)self.Latex3Edit.setEnabled(False)# # show the convert latex result# self.reviewImgLable = QLabel()# self.reviewImgLable.setStyleSheet("border: 2px solid red")grid = QGridLayout()grid.setSpacing(20)# 排版grid.addWidget(self.imgLable, 1, 0, 5, 3)grid.addWidget(self.img2latexBtn,6,0,1,2)grid.addWidget(self.Latex1Edit, 7, 0)grid.addWidget(self.Latex1copyBtn, 7, 1)# grid.addWidget(self.Latex1EditBtn, 7, 2)grid.addWidget(self.Latex2copyBtn, 8, 1)grid.addWidget(self.Latex2Edit, 8, 0)# grid.addWidget(self.Latex2EditBtn, 8, 2)grid.addWidget(self.Latex3copyBtn, 9, 1)grid.addWidget(self.Latex3Edit, 9, 0)# grid.addWidget(self.Latex3EditBtn, 9, 2)# grid.addWidget(self.reviewImgLable, 10, 0, 4, 3)self.setLayout(grid)# sign and slot# img to latex convertself.img2latexBtn.clicked.connect(self.convert)# copy latexself.Latex1copyBtn.clicked.connect(self.copyLatex1)self.Latex2copyBtn.clicked.connect(self.copyLatex2)self.Latex3copyBtn.clicked.connect(self.copyLatex3)# edit latex# self.Latex1EditBtn.clicked.connect(self.Latex1EditImg)# self.Latex1Edit.textChanged.connect(self.Latex1EditImg)# self.Latex2EditBtn.clicked.connect(self.Latex2EditImg)# self.Latex2Edit.textChanged.connect(self.Latex2EditImg)# self.Latex3EditBtn.clicked.connect(self.Latex3EditImg)# self.Latex3Edit.textChanged.connect(self.Latex3EditImg)# beautify the windowself.Beautify()self.show()def Beautify(self):self.setWindowOpacity(0.9)  # 设置窗口透明度# self.setAttribute(qtpy.QtCore.Qt.WA_TranslucentBackground) # 设置窗口背景透明# self.setWindowFlag(qtpy.QtCore.Qt.FramelessWindowHint) # 隐藏边框pe = PyQt5.QtGui.QPalette()self.setAutoFillBackground(True)# pe.setColor(PyQt5.QtGui.QPalette.Window, Qt.Black)  #设置背景色pe.setColor(PyQt5.QtGui.QPalette.Background, Qt.black)self.setPalette(pe)self.imgLable.setStyleSheet(''' QLabel{border: 2px solid red;border-radius:15px;padding:2px 4px;background-color:#aaa;}''')self.Latex1Edit.setStyleSheet('''QLineEdit{border:1px solid gray;border-radius:10px;padding:2px 4px;background-color:#ddd;height:35px;font-color:black;font-weight:1000;font-size:24px}''')self.Latex2Edit.setStyleSheet('''QLineEdit{border:1px solid gray;border-radius:10px;padding:2px 4px;background-color:#ddd;height:35px;font-color:black;font-weight:1000;font-size:24px}''')self.Latex3Edit.setStyleSheet('''QLineEdit{border:1px solid gray;border-radius:10px;padding:2px 4px;background-color:#ddd;height:35px;font-color:black;font-weight:1000;font-size:24px}''')self.Latex1copyBtn.setStyleSheet('''QPushButton{border:1px solid gray;border-radius:4px;padding:5px 5px;height:35px}''')self.Latex2copyBtn.setStyleSheet('''QPushButton{border:1px solid gray;border-radius:4px;padding:5px 5px;height:35px}''')self.Latex3copyBtn.setStyleSheet('''QPushButton{border:1px solid gray;border-radius:4px;padding:5px 5px;height:35px}''')self.img2latexBtn.setStyleSheet('''QPushButton{border:2px solid gray;border-radius:10px;padding:5px 5px;background-color:#555;font-size:24px;font-color:#fff;font-weight:700;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;}''')## Return the base64 encoding of an image with the given filename.#def image_uri(self,filename):image_data = open(filename, "rb").read()return "data:image/jpg;base64," + base64.b64encode(image_data).decode()# Call the Mathpix service with the given arguments, headers, and timeout.def latex(self,args, headers=default_headers, timeout=30):r = requests.post(service,data=json.dumps(args), headers=headers, timeout=timeout)return json.loads(r.text)def convert(self):self.grapclipboard()r = self.latex({'src':self.image_uri(r".\img\equa.png"),'formats': ['latex_simplified']})# print(r['latex_simplified'])latex1 = r['latex_simplified']# test# latex1='111'latex2 = '$' + latex1 + '$'latex3 = '$$' + latex1 + '$$'self.Latex1Edit.setText(latex1)self.Latex2Edit.setText(latex2)self.Latex3Edit.setText(latex3)def copyLatex1(self):# get the latex formulatext = self.Latex1Edit.text()# copy it to clipboardpyperclip.copy(text)def copyLatex2(self):text = self.Latex2Edit.text()pyperclip.copy(text)def copyLatex3(self):text = self.Latex3Edit.text()pyperclip.copy(text)## 识别剪贴板公式#def grapclipboard(self):im = ImageGrab.grabclipboard()im.save(r'.\img\equa.png', 'PNG')self.imgLable.setPixmap(PyQt5.QtGui.QPixmap(r'.\img\equa.png'))## 为程序添加快捷键## 可以自己定义def keyPressEvent(self, event):if (event.key() == Qt.Key_T)and(event.modifiers() == Qt.AltModifier):self.convert()if (event.key() == Qt.Key_C)and(event.modifiers() == Qt.AltModifier):self.copyLatex3()if __name__ == '__main__':app = QApplication(sys.argv)ex = Img2Latex()sys.exit(app.exec_())

篇幅有限latex2img部分我已经去掉了

有兴趣的小伙伴可以在我的github上获得完整版资源

地址
https://github.com/Joshua-li-yi/img2latex

所有的接口调用记录可以在这个地址获取

https://dashboard.mathpix.com/user-data

三、最后

如果觉得此文对你有帮助,请各位大大们给个三连,让更多的童鞋可以看到

谢谢老铁们的支持~~

调用Mathpix API 自制Mathpix snipping (每月1000次免费!!!)相关推荐

  1. 调用 Mathpix AIP 实现每月1000次免费识别

    Mathpix 是优秀的img2latax工具,对于普通用户来说每月有50-100次免费机会,对于需求量大的用户无法满足需求.有一种方法是调用Mathpix官方的API,每月1000次免费机会. 概述 ...

  2. C# + WPF调用Web Api 自制B站客户端

    C# + WPF自制B站客户端 已经开源,地址:Github地址 喜欢的话,请点个Star吧!! 最近无聊尝试调用Web API做个B站的客户端程序练练手,经过两天的摸索有了一些成果.主要的思路有如下 ...

  3. 官方Mathpix API和Quicker自制Mathpix snipping Tool(每月免费1000次!!!)

    通过官方API免费使用Mathpix 1000次,无需写代码! 参考链接: 写在之前: 一.准备工作: 二.获取API keys 三.安装配置Quicker 1.下载安装Quicker. 2.寻找Qu ...

  4. 调用mathpix api识别图片中的公式

    借助mathpix软件可以很方便的识别图片中的公式,复制到word中,可编辑的模式.但是免费版的mathpix只提供每月50次的使用,很难满足要求,但可喜的是他们提供了每月1000次的免费调用接口. ...

  5. python 图表_Python入门学习系列——使用Python调用Web API实现图表统计

    使用Python调用Web API实现图表统计 Web API:Web应用编程接口,用于URL请求特定信息的程序交互,请求的数据大多以非常易于处理的格式返回,比如JSON或CSV等. 本文将使用Pyt ...

  6. JavaScript + Audio API自制简易音乐播放器(详细完整版、小白都能看懂)

    JavaScript + Audio API自制简易音乐播放器(详细完整版) ** 音乐播放器的功能清单如下: ** 1.点击暂停按钮,歌曲暂停 2.点击播放按钮,歌曲播放 3.单曲循环与取消单曲循环 ...

  7. Play 2.6 使用Play WS调用REST API

    使用Play WS调用REST API https://playframework.com/documentation/2.6.x/JavaWS 又是我们需要去访问别的HTTP服务器的资源.PLAY提 ...

  8. 用Python调用OpenAI API进行文本创作

    文章目录 一.前言 二.使用教程 2.1获取API密钥 2.2 连接API 2.3 文本生成 三.创作示例 3.1 诗歌创作 3.2 推荐书单 3.3 超级百度 四.总结 一.前言 本文将教大家用py ...

  9. 用Python调用OpenAI API做有趣的事

    获取 API KEY 首先需要 可以开全局的梯子,选择日本或韩国节点,可以通过 ipinfo 检查当前 IP 地址是否为日本或韩国地区,然后访问 OpenAI 网站注册账号并完成认证. 如果自己完成账 ...

最新文章

  1. 2020-05-02 自动控制原理常用术语
  2. AliCloudDenoise 语音增强算法:助力实时会议系统进入超清音质时代
  3. GUID generation RSS_SYSTEM_GET_UNIQUE_ID
  4. android gridview滚动条位置,Android GridView滚动到指定位置
  5. DDLog-不同颜色打印信息
  6. pandas read_sql
  7. mysql数据索引失效_MySQL索引失效的几种情况
  8. 整合重组叠加市场扩容 “广电云”发展将提速
  9. 使用hbase遇到的问题
  10. 小程序中间放大轮播图_微信小程序实现类3D轮播图
  11. 最简单的又炫的快捷菜单....喜欢的拿起就跑
  12. 2021金三银四,你准备好挑战这份最新腾讯、字节跳动、阿里巴巴Android面试题集了吗?
  13. UWP 写入图片 Exif 信息
  14. Python-玩转数据-Scrapy中Spiders
  15. 【C++】数列求和-加强版
  16. linux优化deepin启动速度,如何优化 Deepin 引导开机速度?
  17. _003_WindowsOperation_为什么升级win10后,很多软件打开就显示文件系统错误(-1073741819)
  18. 命令行查询某web服务器的ip地址
  19. 【Hive】Both left and right aliases encountered in JOIN
  20. 最近在装修房子,展示下最近成果

热门文章

  1. SpringBoot校园二手市场
  2. 关于5G和卫星,这篇文章讲得很全面
  3. STC51入门笔记(郭天祥C语言)---第四节:键盘检测原理及应用实现
  4. Spring Cloud Alibaba (三)Sentinel 简单介绍和使用
  5. python画资本市场线_【投资组合理论】Python绘制上证50成分股有效前沿和CML
  6. 磁环选型攻略及EMC整改技巧
  7. jsp实现页面跳转的几种常用方式
  8. 利用python实现星轨合成
  9. Java并发_cas、aqs
  10. 探访故宫火锅店:到底有多火?