python对图片或文件的操作

一. 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 base64def file_to_base64(file_path):with open(file_path, "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 cv2file_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_datafile_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)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.parseurl = "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.path.exists(folder_path):# 如果不存在,创建文件夹os.makedirs(folder_path)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/656434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不同的强化学习模型适配与金融二级市场的功能性建议

DQN ES DDPG A2C TD3 SAC QMIX MADDPG PPO CQL IMPALA 哪个模型适合进行股票操作 在考虑使用哪种模型进行股票操作时,需要考虑模型的特点、适用场景以及实现复杂度等因素。以下是对您列出的几种强化学习模型的简要概述,以帮助您做出选择: DQ…

【C++】类与对象(二)特殊成员函数

前言 类与对象(二) 文章目录 一、特殊成员函数二、构造函数三、析构函数四、拷贝构造函数五、拷贝赋值运算符 一、特殊成员函数 如果在类的声明中未显式提供某个成员函数的定义,编译器会自动生成一个默认实现。 这包括默认构造函数、默认析构…

Android studio打包apk比较大

1.遇到的问题 在集成linphone打包时发现有118m,为什么如此之大额。用studio打开后发现都是c不同的pu架构。 2.解决办法 增加ndk配置,不选配置那么多的cpu结构,根据自己需要调整。 defaultConfig { applicationId "com.matt.linphoneca…

备战蓝桥杯---数据结构与STL应用(基础3)

今天我们主要介绍的是pair,string,set,map pair:我们可以把它当作一个结构体&#xff1a; void solve(){pair<int int> a;//创建amake_pair(1,2);//添加元素cout<<a.first<<endl<<a.second<<endl;}//输出 当然&#xff0c;它也可以嵌套&#…

51单片机点灯

51单片机点灯 1.点亮LED灯 #include "reg52.h"sbit ledOne P3^7;void main() {//灯亮&#xff0c;给一个P3.7低电平ledOne 0; }给LED1对应标号的P3^7一个低电平&#xff0c;就能点亮LED灯2.LED灯闪烁 #include "reg52.h"sbit ledOne P3^7;void Delay…

ai电销机器人的优势

随着电销机器人的不断深入研究&#xff0c;电销机器人得到了很大的发展&#xff0c;逐渐走入了许多公司中。 机器人不像人一样会闹情绪会累&#xff0c;可以在客户开发上一如既往的开发客户&#xff0c;使用真心录音的方式能让客户听着像和人沟通一样&#xff0c;完成一些流程…

2024年美赛美国大学生数学建模竞赛D题思路解析+代码+论文

下文包含&#xff1a;2024年美国大学生数学建模竞赛&#xff08;美赛&#xff09;A- F题思路解析、选题建议、代码可视化及如何准备数学建模竞赛&#xff08;2号发&#xff09; C君将会第一时间发布选题建议、所有题目的思路解析、相关代码、参考文献、参考论文等多项资料&…

c++ scanf解释

scanf是C中的输入函数&#xff0c;用于从标准输入流中读取数据并将其存储到给定的变量中。它的功能类似于cin&#xff0c;但在某些情况下更方便。 scanf函数的使用格式为&#xff1a; scanf("格式控制字符串", 参数列表); 其中&#xff0c;格式控制字符串指定了输…

python笔记10

1、继承 继承是面向对象编程中的一个重要概念&#xff0c;它允许一个类&#xff08;子类&#xff09;继承另一个类&#xff08;父类&#xff09;的属性和方法。通过继承&#xff0c;子类可以重用父类的代码&#xff0c;并且有机会添加新的属性和方法&#xff0c;或者重写父类的…

使用PowerBI 基于Adventure Works案例分析

Adventure Works案例分析 前言 数据时代来临&#xff0c;但一个人要顺应时代的发展是真理。 数据分析的核心要素 那数分到底是什么&#xff1f; 显然DT 并不等同于 IT&#xff0c;我们需要的不仅仅是更快的服务器、更多的数据、更好用的工具。这些都是重要的组成部分&…

堆宝塔

L2-1 堆宝塔 分数 25 作者 陈越 单位 浙江大学 堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小&#xff0c;按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明…

AI特训一:为什么要学习AI

我们先了解什么是AI AI&#xff08;人工智能&#xff09;是指计算机系统经过学习和推理能够模拟人类智能行为的一种技术。AI利用机器学习、深度学习、自然语言处理等技术&#xff0c;能够分析大量的数据、识别模式、做出决策和预测 AI有哪些强大之处 处理大量数据&#xff1a…

专栏:数据库、中间件的监控一网打尽

前言 对于数据库、中间件的监控&#xff0c;目前社区里最为完善的就是 Prometheus 生态的各个 Exporter&#xff0c;不过这些 Exporter 比较分散&#xff0c;不好管理&#xff0c;如果有很多目标实例需要监控&#xff0c;就要部署很多个 Exporter&#xff0c;要是能有一个大一…

蓝桥杯嵌入式——测量两路PWM频率和占空比

原理&#xff1a;在通道1&#xff0c;TIM_CH1上会输入PWM波&#xff0c;在每个上升沿来的时候会发生三个动作&#xff0c;第一个动作会触发一个中断&#xff0c;第二个动作会把CNT计数值捕获&#xff0c;第三个动作会把CNT的值清0&#xff0c; 要测量占空比则需要打开TI1FP2&a…

经济学基础入门,从《小岛经济学》看经济的演变

一直在学习怎么赚钱&#xff0c;没有专业的人指导。于是就想着先学习一下经济学相关的知识吧&#xff01;无意间看到大家推荐的这本书籍&#xff0c;一本很适合经济学入门的经济《小岛经济学》&#xff0c;这本书以故事的方式&#xff0c;讲解了经济演变过程。而且大约只需要2到…

对嵌入式系统、GCC、的理解

1、嵌入式系统通用硬件组成 2、Linux系统的嵌入式的开发流程 3、Linux系统的嵌入式的结构 4、文件IO和标准IO&#xff1f; 5、为什么需要交叉编译 1、嵌入式系统硬件的限制&#xff08;CPU处理能力不如电脑、存储空间小、网络带宽小不利于传输、安全性不如电脑、能耗问题&…

关于GitHub国内打不开的有效解决办法

哈喽大家好&#xff0c;我是咕噜美乐蒂&#xff0c;很高兴又见面啦&#xff01; GitHub是全球最大的开源代码托管平台之一&#xff0c;但由于某些原因&#xff0c;它在中国大陆地区经常会遭受网络封锁&#xff0c;导致无法正常访问。如果您也遇到了这个问题&#xff0c;不要担…

【计算机网络】——TCP协议

&#x1f4d1;前言 本文主要是【计算机网络】——传输层TCP协议的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日一句…

前端面试题-说说你了解的js数据结构?(2024.1.29)

1、数组 (Array) 数组是一组有序的值的集合&#xff0c;可以通过索引访问。JavaScript 数组可以包含不同的数据类型&#xff0c;并且长度是动态的。 let myArray [1, hello, true, [2, 3]];2、对象 (Object) 对象是无序的键值对的集合。每个键都是字符串或符号&#xff0c;…

安全刷写简单说明

文章目录 1.安全刷写的目的2.安全刷写的实现3.安全刷写的要求4.签名说明5.刷写过程 1.安全刷写的目的 为了避免ECU被恶意篡改数据&#xff0c;从而导致ECU功能失效。 2.安全刷写的实现 目前很多厂商会使对软件进行签名操作&#xff0c;从一定程度上实现安全刷写的目的。 3.…