from PIL import Image, ImageDraw, ImageFont
import numpy as np
import os
import time
def create_folder(folder_path):
"""
如果路径不存在,则递归创建路径
"""
if not os.path.exists(folder_path):
os.makedirs(folder_path)
def get_current_time():
"""
获取当前时间,格式为:2023-10-09 14:27:36
"""
return time.strftime('%Y-%m-%d %H:%M:%S')
def generate_save_path(file_path):
"""
根据文件名生成新的保存路径(在指定目录下)
"""
folder, file = os.path.split(file_path)
filename, extension = os.path.splitext(file)
new_filename = f"1_库_{get_current_time().replace(':', '-').replace(' ', '_')}{extension}"
new_file_path = os.path.join(folder, new_filename)
while os.path.exists(new_file_path): # 防止重名覆盖原有文件
new_filename = f"1_库_{get_current_time().replace(':', '-').replace(' ', '_')}{extension}"
new_file_path = os.path.join(folder, new_filename)
return new_file_path
def save_image(image, save_path):
"""
保存图片到指定路径
如果保存失败,则返回 False
"""
try:
create_folder(os.path.dirname(save_path)) # 确保保存目录存在
image.save(save_path)
print(f"成功保存:{save_path}") # 打印成功信息
return True
except:
print(f"❌无法保存文件:{save_path}") # 打印失败信息
return False
def add_text_to_image(image, text):
"""
在图片中央添加文字
"""
draw = ImageDraw.Draw(image)
width, height = image.size
font_size = min(width, height) // 20
font_path = "/storage/emulated/0/文件/字体大全/字体包/宋体.ttf" # 字体文件路径
font = ImageFont.truetype(font_path, font_size)
text_width, text_height = draw.textbbox((0, 0), text, font=font)[2:]
text_x = (width - text_width) // 2
text_y = (height - text_height) // 2
draw.text((text_x, text_y), text, font=font, fill=(255, 255, 255))
def image_processing(input_path):
"""
图片处理主函数
"""
if os.path.isfile(input_path) and (input_path.endswith('.jpg') or input_path.endswith('.png')):
try:
image = Image.open(input_path).convert('L')
save_path = generate_save_path(input_path)
add_text_to_image(image, save_path.split('/')[-1])
save_image(image, save_path)
except:
print(f"❌无法处理文件:{input_path}")
elif os.path.isdir(input_path):
for root, dirs, files in os.walk(input_path):
for file in files:
if file.endswith('.jpg') or file.endswith('.png'):
try:
image_path = os.path.join(root, file)
image = Image.open(image_path).convert('L')
save_path = generate_save_path(image_path)
add_text_to_image(image, save_path.split('/')[-1])
if not save_image(image, save_path):
save_path = input("请输入要保存的文件路径(包括文件名和后缀名):")
if save_path: # 如果用户输入了路径,则重新尝试保存
save_image(image, save_path)
except:
print(f"❌无法处理文件:{image_path}")
else:
print("输入的路径无效!")
if __name__ == "__main__":
input_path = input("请输入图片路径或文件夹路径:")
save_dir = "/storage/emulated/0/文件/代码print相关/结构图/"
create_folder(save_dir)
image_processing(input_path)
#报错
/data/user/0/org.qpython.qpy/files/bin/qpy thon3.sh "/storage/emulated/0/qpython/图片 处理.转.py" && exit
python/图片处理.转.py" && exit < 请输入图片路径或文件夹路径:/storage/emula ted/0/unheadimage1677880036923.png
❌无法处理文件:/storage/emulated/0/unhead image1677880036923.png
#[QPython] Press enter to exit ...
# 我的问题
from PIL import Image
import numpy as np
import os
import join
import time
def image(sta,end,depths=10):
a = np.asarray(Image.open(sta).convert('L')).astype('float')
depth = depths # 深度的取值范围(0-100),标准取10
grad = np.gradient(a) # 取图像灰度的梯度值
grad_x, grad_y = grad # 分别取横纵图像梯度值
grad_x = grad_x * depth / 100.#对grad_x值进行归一化
grad_y = grad_y * depth / 100.#对grad_y值进行归一化
A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.)
uni_x = grad_x / A
uni_y = grad_y / A
uni_z = 1. / A
vec_el = np.pi / 2.2 # 光源的俯视角度,弧度值
vec_az = np.pi / 4. # 光源的方位角度,弧度值
dx = np.cos(vec_el) * np.cos(vec_az) # 光源对x 轴的影响
dy = np.cos(vec_el) * np.sin(vec_az) # 光源对y 轴的影响
dz = np.sin(vec_el) # 光源对z 轴的影响
b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z) # 光源归一化
b = b.clip(0, 255)
im = Image.fromarray(b.astype('uint8')) # 重构图像
im.save(end)
def main():
xs=10
start_time = time.clock()
startss = os.listdir(r"C:\Users\Administrator\Desktop\gugong")
time.sleep(2)
for starts in startss:
start = ''.join(starts)
sta = 'C:/Users/Administrator/Desktop/gugong/' + start
end = 'C:/Users/Administrator/Desktop/gugong/' + 'HD_' + start
image(sta=sta,end=end,depths=xs)
end_time = time.clock()
print('程序运行了 ----' + str(end_time - start_time) + ' 秒')
time.sleep(3)
main()
程序运行了 ----43.01828205879955 秒 #一共35张图片
用input输入路径
如果是文件夹就处理文件夹,如果是文件就处理文件
细致的完成我的需求:文件名命名方法:
1.(1.指对文件编号)+ 库 + 时间戳.后缀名
时间戳格式
2023-10-1 14:27:36
严格按照此类型时间戳
文件保存位置
/storage/emulated/0/文件/代码print相关/结构图/
没有就新建
使用宋体中文字体路径:
/storage/emulated/0/文件/字体大全/字体包/宋体.ttf
添加判断,如果在指定的路径保存不了文件,
就创建文件路径保存
如果显示失败❌,就由我来设置用
input保存文件路径文件夹