php python整合_PHP与Python程序交互

php程序中与python脚本交互,使用python封装工具方法供php程序调用,数据分类、AI类可用python封装脚本,为php程序赋能

以pdf转png场景为例,python脚本实现pdf转png功能并返回json格式数据

1.php中调用示例

/**

* 说明:

* exec有3个参数

* 第一个是要执行的命令

* 第二个是参数是一个数组,数组的值是由第一个命令执行后生成的

* 第三个参数执行的状态,1表示成功,其他都表示失败。

* 查看具体信息需要使用 2>&1, 命令就会输出shell执行时的错误到$output变量,必须加上。

* @param $pdfFile

* @return array

*/

static function pdfToPngByPy($pdfFile)

{

//pdf文件为绝对路径

$pdfFile = '/Applications/MAMP/htdocs/xxx/'.$pdfFile;

//python3程序和要执行的python脚本文件均为绝对路径。

//$pdffile为传入python脚本的参数

//该命令相当于 python3 [pdftopng.py](http://pdftopng.py/) pdffile

//2>&1必须要有,不然拿不到返回

$pythonEx = "/Library/Frameworks/Python.framework/Versions/3.8/bin/python3 /Users/leedev/Documents/python/handlerimg/pdftopng.py {$pdfFile} 2>&1";

exec($pythonEx, $out, $res);

$ret = json_decode($out[0], true);

return $ret;

}

2.python文件示例

需先安装PyMuPDF扩展

python3 -m pip install PyMuPDF

import sys

import fitz

import json

import time

import random

rotate = int(0)

# 生成图片的尺寸:数值越大,图片尺寸越大

zoom_x = 1.8

zoom_y = 1.8

trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)

# 获取php程序传递的参数

open_file_path = sys.argv[1]

save_file_path = '/Applications/MAMP/htdocs/invoiceFile/'

try:

pdf = fitz.open(open_file_path)

# 多页pdf转换成多个图片

# for i in range(pdf.pageCount):

# pm = pdf[i].getPixmap(matrix=trans, alpha=False)

# pm.writePNG(save_file_path + '/%s.png' % i)

# 单页pdf转png

pm = pdf[0].getPixmap(matrix=trans, alpha=False)

file_name = str(int(time.time()) + random.randint(999, 9999)) + '.png'

pm.writePNG(save_file_path + file_name)

except IOError:

returnArr = {"code": 999, 'message': '文件操作异常'}

print(json.dumps(returnArr))

except TypeError:

returnArr = {"code": 500, 'message': '内部错误'}

print(json.dumps(returnArr))

except RuntimeError:

returnArr = {"code": 500, 'message': '内部错误'}

print(json.dumps(returnArr))

else:

returnArr = {"code": 200, "fileName": file_name}

print(json.dumps(returnArr))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值