赵灵越 2023-10-09 13:24 采纳率: 99.3%
浏览 9
已结题

图片处理代码一直报错,显示图片不能保存,什么原因?我的路径没错

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保存文件路径文件夹
  • 写回答

2条回答 默认 最新

  • 赵4老师 2023-10-09 14:01
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月17日
  • 已采纳回答 10月9日
  • 创建了问题 10月9日

悬赏问题

  • ¥20 ic卡dump文件校检码解密
  • ¥15 关于:接收到的数据不是有效的JSON格式
  • ¥15 apdl语言如何增加受力分析
  • ¥15 算法对比:学校优化算法与蚁群算法对比
  • ¥15 机电一体化系统设计说明书
  • ¥20 sgy数据提取地震波速,有人能回答吗小馋
  • ¥20 c#实现打开word的功能,并且需要安装成windows服务,word打不开怎么办
  • ¥15 python用ARIMA时间预测模型预测数据出错,急!
  • ¥30 为什么后端传给前端vue的河流json数据不在地图中显示出来
  • ¥50 关于弹性波动方程求解的问题: