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)相关文章:
python对图片或文件的操作
一. base64 与图片的相互转换 1. base64 转图片 import base64 from io import BytesIO from PIL import Image# base64 编码的图像数据(示例) base64_data "iVBn9DHASKJDjDsdSADSf8lgg"# 将 base64 编码的字符串解码为二进制数据 binary_d…...
架构篇19:单服务器高性能模式-Reactor与Proactor
文章目录 ReactorProactor小结上篇介绍了单服务器高性能的 PPC 和 TPC 模式,它们的优点是实现简单,缺点是都无法支撑高并发的场景,尤其是互联网发展到现在,各种海量用户业务的出现,PPC 和 TPC 完全无能为力。今天我将介绍可以应对高并发场景的单服务器高性能架构模式:Rea…...
PyInstaller 将 Python 程序生成可直接运行的程序
图标转换地址:https://convert.app/#google_vignette 官方文档:https://readthedocs.org/projects/pyinstaller/downloads/pdf/stable/#page20 安装pyinstaller pip install pyinstaller执行打包 pyinstaller -i ./resource/w.icns -w -F whv.py --a…...
专有钉钉开发记录,及问题总结
先放几个专有钉钉开发文档 专有钉钉官网的开发指南 服务端(后端)api文档 前端api文档 前端开发工具下载地址 小程序配置文件下载地址 后端SDK包下载地址 专有钉钉域名是openplatform.dg-work.cn 开发记录 开发专有钉钉时有时会遇到要使用钉钉的api;通过 my 的方…...
Java Swing桌面项目打包成可执行jar
前言 最近有需求,将Swing项目打包为一个可执行的jar包,遇见了一些问题,参考AI助手,解决了遇到的问题,也有一些亲身实践体会,记录一下。开发环境IntelliJ IDEA,JDK8,用kotlin语言实现…...
python数组反转的几种方式
python数组的反转可以有好几种方式,基于python语言的强大表现能力和丰富的特性,总结以下几种。 首先给定一个基本数组: d [1, 2, 3, 4, 5, 6] 1. reversed函数 reversed 是python的内建函数,会将原数组进行反转(但不影响原数组本身的序列…...
算法每日一题: 最大合金数 | 二分
大家好,我是星恒,今天给大家带来的是一道比较正常的二分题目 题目:leetcode 2861假设你是一家合金制造公司的老板,你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用,并且你可以使用 k 台机器来制…...
jvm优化过程
1.top命令执行查看,当前占比比较高的进程,可以看到21660这个进程的cpu占比已经100%了 编辑 2.可以定位到那个微服务的进程,可以看到是fs服务 编辑 3.执行 top -p 21660,然后按下大写的H,可以看到21772这个线程占比最高 编辑 4.…...
《Docker极简教程》--目录
一、前言 本书的目的和目标Docker的简介 二、Docker基础 Docker的历史和发展Docker的工作原理Docker的主要组件 三、Docker环境的搭建 在Windows上搭建Docker环境在Mac上搭建Docker环境在Linux上搭建Docker环境 四、Docker镜像 Docker镜像的概念Docker镜像的创建和使用D…...
嵌入式第十二天!(指针数组、指针和二维数组的关系、二级指针)
1. 指针数组: int *a[5]; char *str[5]; 指针数组主要用来操作字符串数组,通常将指针数组的每个元素存放字符串的首地址实现对多个字符串的操作。 二维数组主要用来存储字符串数组,通过每行存储一个字符串,多行存储多个字符串所组…...
俄罗斯方块游戏设计文档(基于C语言)
1. 引言 本设计文档旨在详细规划基于C语言开发的俄罗斯方块游戏的整体架构、功能模块以及具体实现步骤。这款游戏将通过控制下落的几何形状方块,以填充和消除行的方式进行,旨在提供用户友好的界面与流畅的游戏体验。 2. 需求分析 - 核心元素 - 方块&a…...
【解决】IntelliJ IDEA 重命名 Shift + F6 失效
IntelliJ IDEA 重命名 Shift F6 失效 问题解决 问题 Idea 重命名 Shift F6 ,一直没反应 解决 调查发现原因是微软新版的输入法冲突了。需要设置【使用以前版本的微软拼音输入法】解决兼容性。 设置 -> 时间和语言 -> 区域 -> 语言选项 -> 键盘选项…...
Unknown encoder ‘libmp3lame
环境: macos m1 , python3.10.x 背景 做视频切片, 使用moviepy 中VideoFileClip进行截取视频。 报错: Unknown encoder libmp3lameThe audio export failed because FFMPEG didnt find the specified codec for audio encoding …...
Android升级版本兼容问题
1、JDK的选择 AndroidJavaAPI and language features supported14 (API 34)17Core libraries13 (API 33)11Core libraries12 (API 32)11Java API11 and lowerAndroid versions https://developer.android.com/build/jdks The following table lists which version of Gradle…...
微信生成带参数二维码(用户id), 扫码可获取用户id
生成带参数的二维码: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html 示例代码: /*** 生成带参数的二维码** param userId 用户id* return*/GetMappingRequestMapping("/createTicket/{userId}")pu…...
微信小程序(二十一)css变量-定义页面主题色
注释很详细,直接上代码 上一篇 新增内容: 1.使用css变量 2.消除按钮白块影响 3.修改图标样式 源码: npmTest.json {"navigationStyle": "custom","usingComponents": {//引入vant组件"van-nav-bar"…...
WSL2 Debian系统添加支持SocketCAN
本人最近在使用WSL2,Linux系统选择的是Debian,用起来很不错,感觉可以代替VMware Player虚拟机。 但是WSL2 Debian默认不支持SocketCAN,这就有点坑了,由于本人经常要使用SocketCAN功能,所以决定让Debian支持…...
Redis的五种常用数据结构以及其底层实现
1.字符串 字符串作为Redis中最基础的数据结构,他存储的值可以是任何东西,可以是字符串,数字,二进制,但是字符串存储的值不能超过512M 在Redis中字符串的底层编码是根据值进行改变的 当存储的字符串是一个数字的时候…...
防御保护笔记
防火墙的主要职责在于:控制和防护 --- 安全策略 --- 防火墙可以根据安全策略来抓取流量之 后做出对应的动作。 防火墙分类: 包过滤防火墙: 1,很多安全风险集中在应用层的,所以,仅关注三四层的数据无法做到…...
C++笔记之作用域解析符::和命名空间、作用域的关系
C++笔记之作用域解析符::和命名空间、作用域的关系 —— 杭州 2024-01-26 code review 文章目录 C++笔记之作用域解析符::和命名空间、作用域的关系1.`命名空间`和`作用域`两个术语的联系和区别命名空间(Namespace)作用域(Scope)联系与区别2.`作用域解析符::`和`命名空间`…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...
