打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
调用Mathpix API 自制Mathpix snipping (每月1000次免费!!!)

相信大家都知道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 sysimport osimport base64import requestsimport jsonimport PyQt5.QtGuiimport PyQt5.QtCorefrom PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QWidget, QGridLayout, QLineEditfrom PyQt5.QtCore import Qtfrom PIL import ImageGrabimport pyperclipimport 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-8import sysimport osimport base64import requestsimport jsonimport PyQt5.QtGuiimport PyQt5.QtCorefrom PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QWidget, QGridLayout, QLineEditfrom PyQt5.QtCore import Qtfrom PIL import ImageGrabimport pyperclipimport 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 latex        self.Latex1copyBtn = QPushButton()        self.Latex2copyBtn = QPushButton()        self.Latex3copyBtn = QPushButton()        # set copy btn icon        self.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 latex        self.Latex1EditBtn = QPushButton()        self.Latex2EditBtn = QPushButton()        self.Latex3EditBtn = QPushButton()        # set edit btn icon        self.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 btn        self.img2latexBtn = QPushButton('convert')        # show the picture on clipboard        self.imgLable = QLabel()        # show the formula in latex        self.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 convert        self.img2latexBtn.clicked.connect(self.convert)        # copy latex        self.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 window        self.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 formula        text = self.Latex1Edit.text()        # copy it to clipboard        pyperclip.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


三、最后

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

谢谢老铁们的支持~~

来源:https://www.icode9.com/content-4-670951.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【目标检测】YOLOv5
公式免费转 LaTex 代码,截图、转换一气呵成!
通过Mathpix API 将公式识别为 LaTeX -不使用任何代码免费调用Mathpix API
Mathpix收费了,教你免费调用mathpix API继续使用 | Shineの小破站
PyQT5 点击按钮关闭窗口
免费数学神器!再复杂的公式,只要有照片就能转成LaTeX
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服