Python获取数据库信息->解压zip->去水印->打包zip
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import cv2
import numpy
import pymysql
import zipfile
import os,time,sys
import py7zr
import subprocess
from PIL import Image
db = pymysql.connect(
host="127.0.0.1",
user="root",
password="root",
database="pbapi",
charset="utf8")
water1png = 'water1.png'
water2png = 'water2.png'
flag = ''
currbookid = 0
#获取压缩密码 get_pwd("661")
def get_pwd(id):
cursor = db.cursor()
cursor.execute('SELECT decrypt FROM YZN_BOOK WHERE zip_url LIKE "%'+id+'%"')
data = cursor.fetchone()
db.close()
return data[0]
#压缩指定文件夹
def zip_file(src_dir, pwd,zip):
subprocess.call("7z a -tzip "+zip+" -p"+pwd+" "+src_dir+"/*",shell=True)
#解压zip
def unzip_file(zip_src, pwd, dst_dir):
subprocess.call("7z e "+zip_src+" -y -p"+pwd+" -o"+dst_dir+"",shell=True)
#去除水印
def get_water(input):
global flag
src = cv2.imread(input)
img = Image.open(input)
cover(img.width,img.height)
waterpng = str(img.width)+"x"+str(img.height)+".png"
mask = cv2.imread(waterpng, cv2.IMREAD_GRAYSCALE)
dst = cv2.inpaint(src, mask, 5, cv2.INPAINT_TELEA)
cv2.imwrite(input, dst)
#遍历目录内容并去除水印
def file_name(file_dir):
global flag
for root, dirs, files in os.walk(file_dir):
for filename in files:
if filename.endswith(".jpg"):
get_water(file_dir+"/"+filename)
return True
#更新
def exesql(sql):
db.ping(reconnect=True)
cursor = db.cursor()
cursor.execute(sql)
db.commit()
cursor.close()
#查询
def selectBook():
global currbookid,flag
db.ping(reconnect=True)
cursor = db.cursor()
cursor.execute('SELECT id,zip_url,bookid FROM YZN_BOOK WHERE state = 2 ORDER BY bookid asc')
data = cursor.fetchone()
currbookid = data[0]
if(int(data[2]) >= 102):
flag = '1'
else:
flag = '2'
cursor.close()
return data[1]
#处理某一个BookID
def execute(bookid):
#解压
global currbookid
pwd = get_pwd(bookid)
print(pwd)
flag = ''
outdir = os.getcwd()+"/tmp/"+bookid
zip = os.getcwd()+"/books/"+bookid+".zip"
outzip = os.getcwd()+"/after/"+bookid+".zip"
unzip_file(zip,pwd,outdir)
issuccess = file_name(outdir)
if issuccess:
zip_file(outdir,pwd,outzip)
sql = "update YZN_BOOK set state=1 WHERE id = "+str(currbookid)
exesql(sql)
else:
sql = "update YZN_BOOK set state=2 WHERE id = "+str(currbookid)
exesql(sql)
def cover(ow,oh):
global flag
if flag == '1':
img = Image.open('big1.png')
else:
img = Image.open('big2.png')
img1 = img.convert("RGB")
x = 2000 - ow
y = 0
w = ow + x
h = oh + y
cropped = img.crop((x,y,w,h))
cropped.save(str(ow)+'x'+str(oh)+'.png')
def start():
execute(selectBook())
start()
start()