开发者

python如何对图片或文件的操作

开发者 https://www.devze.com 2024-09-15 09:21 出处:网络 作者: 纯洁的小魔鬼
目录一. base64 与图片的相互转换1. base64 转图片2.图片转 bahttp://www.devze.comse64二.图片和像素点的操作1. 读取图片的像素点矩阵, 写入到 json 文件中2.读取像素矩阵, 生成图片三.本地文件和二进制的互相转换1
目录
  • 一. base64 与图片的相互转换
    • 1. base64 转图片
    • 2.图片转 bahttp://www.devze.comse64
  • 二.图片和像素点的操作
    • 1. 读取图片的像素点矩阵, 写入到 json 文件中
    • 2.读取像素矩阵, 生成图片
  • 三.本地文件和二进制的互相转换
    • 1.本地文件转二进制
    • 2.二进制转本地文件
  • 四.计算文件的 md5
    • 1.计算本编程客栈地文件的 md5
    • 2.计算数据二进制的 md5
    • 3.Windows 获取本地文件的 md5
    • 4.linux 获取本地文件的 md5
  • 五.下载网络文件到本地
    • 六.循环建立多层文件夹
      • 总结

        一. base64 与图片的相互转换

        1. base64 转图片

        import base64
        from io import BytesIO
        from PIL import Image
        
        # base64 编码的图像数据(示例)
        base64_data = "ivbn9DHASKJDjDsdSADSf8lgg=="
        
        
        # 将 base64 编码的字符串解码为二进制数据
        binary_data = base64.b64decode(base64_data)
        
        # 将二进制数据转换为 BytesIO 对象
        bytes_io = BytesIO(binary_data)
        
        # 使用 PIL(Pillow)加载图像
        image = Image.open(bytes_io)
        
        # 保存图像
        image.save("output_image.png")
        
        print("图像保存成功")
        

        2.图片转 base64

        import base64
        
        def file_to_base64(file_path):
            with open(file_patpythonh, "rb") as file:
                # 读取文件内容
                file_data = file.read()
                # 使用base64编码
                base64_encoded = base64.b64encode(file_data)
                # 将bytes对象转换为字符串
                base64_string = base64_encoded.decode("utf-8")
                return base64_string
        
        
        # 示例:将图片转换为Base64编码
        image_path = "D:/output_image.png"
        
        base64_data = file_to_base64(image_path)
        
        # 打印Base64编码
        print(base64_data)
        

        二.图片和像素点的操作

        1. 读取图片的像素点矩阵, 写入到 json 文件中

        jpg 一般为3通道, png 一般为 4通道

        """
        读取图片像素点矩阵, 写入到json文件
        """
        from PIL import Image
        import numpy as np
        import json
        
        # 打开图片
        img = Image.open('D:/input_image.png')
        
        # 获取图片大小和格式
        print(img.size, img.format)
        
        # 显示图片
        # img.show()
        
        # 获取像素数据
        pixels = np.array(img)
        
        # 将像素点转为 list 写入文件
        file_object = open('D:/why.json', 'w', encoding="utf8")
        json.dump(pixels.tolist(), file_object, ensure_ascii=False)

        2.读取像素矩阵, 生成图片

        """
        读取像素点矩阵, 生成图片
        """
        import json
        import numpy as np
        import cv2
        
        file_object = open("D:/why.json", "r+", encoding='utf8')
        file_data_str = file_object.read()
        file_object.close()
        
        matrix_data = json.loads(file_data_str)
        
        image = np.array(matrix_data, dtype=np.uint8)
        print(image.shape)
        
        cv2.imwrite("D:/output_image2.jpg", image)

        三.本地文件和二进制的互相转换

        1.本地文件转二进制

        # 本地文件转二进制
        def file_binary(path):
            with open(path, 'rb') as file:
                binary_data = file.read()
            return binary_data
        
        
        file_path = "D:/input_image.png"
        binary = file_binary(file_path)

        2.二进制转本地文件

        # 本地文件转二进制
        def file_binary(path):
            with open(path, 'rb') as file:
                binary_data = file.read()
            return binary_data
        
        
        # 二进制写入到本地文件
        def save_binary_file(path, binary_data):
            # 将二进制数据写入文件
            with open(path, "wb") as file:
                file.write(binary_data)
        
        
        file_path = "D:/input_image.png"
        binary = file_binary(file_path)
        
        to_file_path = "D:/output_image.png"
        save_binary_file(to_file_path, binary)

        四.计算文件的 md5

        1.计算本地文件的 md5

        import hashlib
        
        # 计算本地文件的 md5 值
        def calculate_md5(path):
            # 打开图像文件
            with open(path, "rb") as f:
                # 读取图像数据
                binary_data = f.read()
        
            # 计算 MD5 值
            md5_hash = hashlib.md5(binary_data)
         android   md5_value = md5_hash.hexdigest()
        
            return md5_value
        
        
        # 图像文件路径
        file_path = "D:/output_image.png"
        
        # 获取图像的 MD5 值
        md5 = calculate_md5(file_path)
        print(md5)
        

        2.计算数据二进制的 md5

        跟计算本地文件的md5差不多, 只不过传入的是二进制数据而已, 二进制数据除了是从文件中直接读取的, 也有可能是从数据库中获取, 比如 mongo, 所以也要注意一下编码问题。

        import hashlib
        
        # 本地文件转二进制
        def file_binary(path):
            with open(path, 'rb') as file:
                binary_data = file.read()
            return binary_data
        
        
        # 计算二进制数据的 md5
        def calculate_md5(binary_data):
            # 检查是否是 Unicode 字符串
            # (因为二进制数据除了是从文件中直接读取的, 也有可能是从数据库中获取, 比如 mongo)
            if isinstance(binary_data, str):
                # 将 Unicode 字符串编码为字节对象
                binary_data = binary_data.encode('utf-8')
        
            md5_hash = hashlib.md5(binary_data)
            return md5_hash.hexdigest()
        
        
        file_path = "D:/input_image.png"
        binary = file_binary(file_path)
        
        # 计算 MD5 值
        md5 = calculate_md5(binary)
        
        print(md5)
        

        3.windows 获取本地文件的 md5

        certutil -hashfile test.pdf MD5

        4.linux 获取本地文件的 md5

        md5sum test.pdf

        五.下载网络文件到本地

        常用的一种爬虫方法,任何类型的文件都可以

        import urllib.request
        import urllib.parse
        
        
        url = "https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF"
        
        urllib.request.urlretrieve(url, "D:/abc.jpg")
        

        六.循环建立多层文件夹

        直接建立多层文件夹, 如果已经存在的话, 则忽视

        def create_folder_if_not_exists(folder_path):
            # 检查文件夹是否存在
            if not os.patpythonh.exists(folder_path):
                # 如果不存在,创建文件夹
                os.makedirs(folder_path)
        

        总结

        以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

        0

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        关注公众号