【教学类-55-02】20240512图层顺序挑战(四格长条纸加黑色边框、4*4、7张 、43200张去掉非7色有23040张,去掉重复样式有几种?)

作品展示

背景需求:

之前的代码吗存在几个问题,最大的问题是不能生成“”长条黑边框””

【教学类-55-01】20240511图层顺序挑战(四格长条纸)(4*4)和“手工纸自制参考图”-CSDN博客文章浏览阅读485次,点赞27次,收藏8次。【教学类-55-01】20240511图层顺序挑战(四格长条纸)(4*4)和“手工纸自制参考图”https://blog.csdn.net/reasonsummer/article/details/138745119

一、4宫格7条颜色的不重复排列数量

14:45-14:57,13分钟生成了40320张图片不重复的排列方法

每张图3-4KB,

代码展示:

'''
图层重叠挑战(长矩形带黑框) (抽取7) 一共有40320个不重复
作者:AI对话大师,阿夏
时间:2024年5月12日
'''
from PIL import Image, ImageDraw
import os,random
import itertoolsprint('--------1、制作图片-----------')
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条'folder_path = path + r'\jpg'
os.makedirs(folder_path, exist_ok=True)colors = ['red', 'orange','Yellow', 'green',  'lightgreen', 'skyblue','blue','Pink',]from PIL import Image, ImageDraw
import osfolder_path=r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\jpg'
# 创建画布
canvas_width = 800
canvas_height = 800
canvas_color = (255, 255, 255)  # 白色背景
line_color = (0, 0, 0)  # 黑色线条
line_width = 3
margin = 100  # 边距canvas = Image.new('RGB', (canvas_width, canvas_height), canvas_color)
draw = ImageDraw.Draw(canvas)# 计算单元格大小和绘制区域
num_rows = 4
num_cols = 4
cell_size = min((canvas_width - 2 * margin) // num_cols, (canvas_height - 2 * margin) // num_rows)
start_x = (canvas_width - cell_size * num_cols) // 2
start_y = (canvas_height - cell_size * num_rows) // 2# 绘制第一行四个单元格的长度为红色的矩形,边框为10像素的黑色# 绘制所有单元格的矩形
# 绘制所有单元格的矩形
# for row in range(num_rows):
#     for col in range(num_cols):
#         x1 = start_x + col * cell_size
#         y1 = start_y + row * cell_size
#         x2 = x1 + cell_size
#         y2 = y1 + cell_size
#         draw.rectangle([(x1, y1), (x2, y2)], fill='white', outline=line_color, width=line_width)# 4行4列8条四格纸
#  第1行
def draw_h1_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_xy1 = start_yx2 = start_x + 4 * cell_sizey2 = start_y + 1 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[0], outline=line_color, width=line_width)#  第2行
def draw_h2_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_xy1 = start_y + 1 * cell_sizex2 = start_x + 4 * cell_sizey2 = start_y + 2 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[1], outline=line_color, width=line_width)#  第3行
def draw_h3_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_xy1 = start_y + 2 * cell_sizex2 = start_x + 4 * cell_sizey2 = start_y + 3 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[2], outline=line_color, width=line_width)#  第4行
def draw_h4_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_xy1 = start_y + 3 * cell_sizex2 = start_x + 4 * cell_sizey2 = start_y + 4 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[3], outline=line_color, width=line_width)#  第1列
def draw_l1_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_xy1 = start_yx2 = start_x + 1 * cell_sizey2 = start_y + 4 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[4], outline=line_color, width=line_width)#  第2列
def draw_l2_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_x + 1 * cell_sizey1 = start_yx2 = start_x + 2 * cell_sizey2 = start_y + 4 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[5], outline=line_color, width=line_width)#  第3列
def draw_l3_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_x + 2 * cell_sizey1 = start_yx2 = start_x + 3 * cell_sizey2 = start_y + 4 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[6], outline=line_color, width=line_width)#  第4列
def draw_l4_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_x + 3 * cell_sizey1 = start_yx2 = start_x + 4 * cell_sizey2 = start_y + 4 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[7], outline=line_color, width=line_width)#     # 将函数名称提取出来并放入列表
# function_names = ['draw_h1_rectangle','draw_h2_rectangle','draw_h3_rectangle','draw_h4_rectangle','draw_l1_rectangle','draw_l2_rectangle','draw_l3_rectangle','draw_l4_rectangle']
# # 生成所有可能的排列,是元祖()
# permutations = list(itertools.permutations(function_names))# # 打印排列数量
# print(f"总共有 {len(permutations)} 种不同的排列。")
# # 40320 8的阶乘import itertoolsfunction_names = ['draw_h1_rectangle','draw_h2_rectangle','draw_h3_rectangle','draw_h4_rectangle','draw_l1_rectangle','draw_l2_rectangle','draw_l3_rectangle','draw_l4_rectangle']# # 调用函数列表中的函数
# for draw_function in function_names:
#     draw_function(start_x, start_y, cell_size, line_color, line_width)# # # 保存图片
# # image_path = os.path.join(folder_path, f'测试.jpg')
# # canvas.save(image_path)# # print(f'图片已保存至:{image_path}')import itertools#
# 生成从 8 个元素中选取 7 个元素的所有可能排列,8个互相配对40320,7个互相配对也是40320
permutations = list(itertools.permutations(function_names, 7))
# print(permutations[0:10])# 打印排列数量
print(f"总共有 {len(permutations)} 种不同的排列。")
# 总共有 40320 种不同的排列。n=1
# 打印所有排列
for permutation in permutations:    # 因为有40万个,所以先测试前20个# print(permutation)# 将元组转换为函数对象列表functions = [eval(function_name) for function_name in permutation[::-1]]# # 打印函数对象列表,一长串文字print(functions)# [<function draw_triangle_2 at 0x000001A4B402F3A8>, <function draw_triangle_1 at 0x000001A4B402FB88>, <function draw_triangle_6 at 0x000001A4B4061288>, <function draw_triangle_3 at 0x000001A4B23C5AF8>, <function draw_triangle_4 at 0x000001A4B4061168>, <function draw_triangle_5 at 0x000001A4B40611F8>]# 运行一个7元素,就打乱一次颜色,确保color【0】抽取的颜色每次都不同# random.shuffle(colors)# 调用函数绘制等边三角形# 调用函数绘制矩形for func in functions:# 为每个函数添加缺失的参数func(start_x, start_y, cell_size, line_color, line_width)# 保存绘制好的图像canvas.save(folder_path + fr'\{n:05d}.png')n+=1

第二个问题是:去除重复的排列方式

以下是三天三夜漫长的测试(

筛选)

二、检测图片并删除的时间比生成40320张图片更长

15:00-16:40 足足等了100分钟 ,久到我以为程序中断了!

图片颜色检测:7色+黑白,删除后还有23040个不重复重叠方式

三、发现48张一组的图片样式相等

我发现前48张图片的样式是一样,前三行3色+第四行四个颜色,

第49张-97张(48张)都是一个样式:第1、2、4行分别一种颜色、第3行四种颜色。

最后48张样式,第一列4个颜色,第2、3、4一种颜色

计算器算了一下,发现可以整除,不同的样式有480种

也就是可以23040张做成48个一组,保留一张,其他删除。

import osfolder_path =r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\jpg'# 替换为实际的文件夹路径# 获取文件夹中的所有文件名
file_names = os.listdir(folder_path)# 将文件名与文件夹路径拼接
file_paths = [os.path.join(folder_path, file_name) for file_name in file_names]# 将文件名与文件夹路径按照每组24个进行分组
grouped_file_paths = [file_paths[i:i+48] for i in range(0, len(file_paths), 48)]
print(len(grouped_file_paths))
# 480组# 遍历每一组文件路径列表
for group in grouped_file_paths:# 保留每组中的第一个文件,删除后面的23个文件for file_path in group[1:]:os.remove(file_path)print("删除操作已完成。")

以上方法看上去合理,但是筛选出来的480张图片还是有一样的重复(布局结构重复,但是色卡不一样)


三、放弃随机颜色,用单色来试试40320种图形到底是什么样的

100分钟后,终于再次活动23040个7色图案,看到有大量的相同的图案

检测图片是否相同,相同就删除第一张。

from PIL import Image
import os,timedef compare_images(image1_path, image2_path):# 打开两张图片image1 = Image.open(image1_path)image2 = Image.open(image2_path)# 比较图片尺寸if image1.size != image2.size:return False# 比较图片像素pixel1 = image1.load()pixel2 = image2.load()for x in range(image1.width):for y in range(image1.height):if pixel1[x, y] != pixel2[x, y]:return Falsereturn True# 示例用法
image_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\一样'  # 替换为图片所在的文件夹路径# 获取文件夹中的所有图片文件路径
image_files = [file for file in os.listdir(image_folder) if file.endswith(('.jpg', '.jpeg', '.png', '.gif'))]# 对每对图片进行比较,并删除第一张图片
for i in range(len(image_files)-1):image1_path = os.path.join(image_folder, image_files[i])for j in range(i+1, len(image_files)):image2_path = os.path.join(image_folder, image_files[j])if compare_images(image1_path, image2_path):# 删除第一张图片os.remove(image1_path)print(f"已删除图片:{image_files[i]}")break  # 找到相同的图片后就跳出循环,继续下一对图片的比较print("删除操作已完成。")

删除完全相同的图片的第一张,保留第二张

从2024年5月12日22:00-2024年5月13日6:56分,终于把第一轮的256个(90)的文件夹内部图片筛选一遍,删除部分图片

5月13日6:56分,筛选到编号3.2万,实际是4.32张

5月13日7:00删除到30000万张时,电脑黑屏了,打开以后程序关闭了。

四、减少互相筛选的图片数量,提升检测数独

只能重新进行删除,这次我把40张图片做成一个文件夹,减少互相核对的数量,这样又576个文件夹

import os
import shutil# 第一、2万张图片分开识别# 原始文件夹路径
image_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\一样'# 新建文件夹路径
new_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\整理'
os.makedirs(new_folder,exist_ok=True)# 创建新建文件夹
os.makedirs(new_folder, exist_ok=True)# 获取文件夹中的所有图片文件路径
image_files = [file for file in os.listdir(image_folder) if file.endswith(('.jpg', '.jpeg', '.png', '.gif'))]# 按照90个一组移动图片
group_size = 40
num_groups = len(image_files) // group_size + 1for group in range(num_groups):start_index = group * group_sizeend_index = (group + 1) * group_size# 获取当前组的图片文件路径group_files = image_files[start_index:end_index]# 创建当前组的文件夹group_folder = os.path.join(new_folder, str(f'{group:03d}'))os.makedirs(group_folder, exist_ok=True)# 移动图片到当前组的文件夹for file in group_files:src_path = os.path.join(image_folder, file)dst_path = os.path.join(group_folder, file)shutil.copy(src_path, dst_path)print("移动操作已完成。")from PIL import Image
import osdef compare_images(image1_path, image2_path):# 打开两张图片image1 = Image.open(image1_path)image2 = Image.open(image2_path)# 比较图片尺寸if image1.size != image2.size:return False# 比较图片像素pixel1 = image1.load()pixel2 = image2.load()for x in range(image1.width):for y in range(image1.height):if pixel1[x, y] != pixel2[x, y]:return Falsereturn True# # 文件夹路径# # 第二:在258个文件里单独核对,第一遍去重# folder_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\整理'# # 获取所有子文件夹
# subfolders = [subfolder for subfolder in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, subfolder))]# # 对每个子文件夹进行处理
# for subfolder in subfolders:
#     subfolder_path = os.path.join(folder_path, subfolder)#     # 获取子文件夹中的所有图片文件路径
#     image_files = [file for file in os.listdir(subfolder_path) if file.endswith(('.jpg', '.jpeg', '.png', '.gif'))]#     # 对每对图片进行比较,并删除第一张图片
#     for i in range(len(image_files)-1):
#         image1_path = os.path.join(subfolder_path, image_files[i])
#         for j in range(i+1, len(image_files)):
#             image2_path = os.path.join(subfolder_path, image_files[j])
#             if compare_images(image1_path, image2_path):
#                 # 删除第一张图片
#                 os.remove(image1_path)
#                 print(f"已删除图片:{image_files[i]}")
#                 break  # 找到相同的图片后就跳出内层循环,继续下一对图片的比较# print("删除操作已完成。")

生成文件夹后,再次用程序把相同图片删除

from PIL import Image
import osdef compare_images(image1_path, image2_path):# 打开两张图片image1 = Image.open(image1_path)image2 = Image.open(image2_path)# 比较图片尺寸if image1.size != image2.size:return False# 比较图片像素pixel1 = image1.load()pixel2 = image2.load()for x in range(image1.width):for y in range(image1.height):if pixel1[x, y] != pixel2[x, y]:return Falsereturn True# 文件夹路径folder_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\整理'# 获取所有子文件夹
subfolders = [subfolder for subfolder in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, subfolder))]# 对每个子文件夹进行处理
for subfolder in subfolders:subfolder_path = os.path.join(folder_path, subfolder)# 获取子文件夹中的所有图片文件路径image_files = [file for file in os.listdir(subfolder_path) if file.endswith(('.jpg', '.jpeg', '.png', '.gif'))]# 对每对图片进行比较,并删除第一张图片for i in range(len(image_files)-1):image1_path = os.path.join(subfolder_path, image_files[i])for j in range(i+1, len(image_files)):image2_path = os.path.join(subfolder_path, image_files[j])if compare_images(image1_path, image2_path):# 删除第一张图片os.remove(image1_path)print(f"已删除图片:{image_files[i]}")break  # 找到相同的图片后就跳出内层循环,继续下一对图片的比较print("删除操作已完成。")

从上午8::43一直运行到15:30分,8个小时完成过了第一遍的删除

把000-576文件夹里剩下的照片放回到“第一次筛选”的文件里。

import os
import shutil# 整理文件夹路径
folder_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\整理'# 目标文件夹路径
target_folder =r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\第一次筛选'
os.makedirs(target_folder,exist_ok=True)# 创建目标文件夹
os.makedirs(target_folder, exist_ok=True)# 遍历整理文件夹中的子文件夹
for subfolder in os.listdir(folder_path):subfolder_path = os.path.join(folder_path, subfolder)# 检查子文件夹是否是文件夹而不是文件if os.path.isdir(subfolder_path):# 遍历子文件夹中的图片文件for file in os.listdir(subfolder_path):file_path = os.path.join(subfolder_path, file)# 检查文件是否是图片文件if file.endswith(('.jpg', '.jpeg', '.png', '.gif')):# 移动图片文件到目标文件夹shutil.copy(file_path, target_folder)print("移动操作已完成。")

第一次筛选后,出现了12224张张片。

因为是40张分割排除重复,所以再次合并后,还会有重复,

再次测试,做成12224/64=191,也就是64张一个文件夹,做191个文件夹,开始第二轮的去重

修改删除代码里面的路径。

64张互相对比,时间很长

16:07--19:37,此时整理到104/190号文件夹,我感觉速度很慢,想试试再减少每个文件夹的元素,看看是否可以识别快一点。

直接测试2张图之间的对比

把文件做成11005/5=2201个一组,看看筛选快不快

19:48——20:34看看5张5张对比删除需要多少时间?

19:53分,出现了第一张删除的图片

5分钟刷到166/2201,大概需要3*5=60分钟筛选完成。

汇总剩余数量

删除后,还有10928,再测试2张图 有5464个文件夹

两张两张对比是不是更快呢

20:46——20.56  10分钟

两张图片正好相同的概率比较低,估计也选不出图片,但是速度会块很多!

还真的找到了两张中的重复

再筛一次。

10926还是双数,继续除以2

5分钟筛一遍,的确没有重复的了

四张一组对比删除10926/3=3642

21:06——21:19

现在五个一组对比

10915/5=2183

21:24-21:50

10868除以4=2717

过程不再了,就是反复的删除

21:57——22:16

还剩10848

10848除以48=226

22:23——

慢慢等……

每次根据除数,把图片分到不同文件里,可以反复删除,但是数量不同。原则上10000个图片放在一起,一一检测,但是720个图片互相检测就用了1小时,我担心1万张直接把电脑干崩溃了。

…………

继续删除中

尽可能多排除一模一样的图片,便于最后一轮的几百张对比,时间更长

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

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

相关文章

第十篇:数字堡垒:操作系统安全深度解析与实战指南

数字堡垒&#xff1a;操作系统安全深度解析与实战指南 1 *引言 1.1 数字世界的守护者 在遥远的比特海中&#xff0c;有一座名为“操作系统”的数字堡垒&#xff0c;它守护着我们的数据宝藏&#xff0c;确保每一次计算的航行都能安全抵达彼岸。然而&#xff0c;这片海域并非风…

记录:robot_localization传感器数据融合学习

一、参考资料 官方&#xff1a; http://wiki.ros.org/robot_localizationhttp://docs.ros.org/en/noetic/api/robot_localization/html/index.html2015 ROSCon 演讲官方网址&#xff08;youyube上也有这个视频&#xff09; 实践教程 https://kapernikov.com/the-ros-robot_…

深入理解Python的类,实例和type函数

问题起源&#xff1a; class t():pass s1 t() s2 type("Student2",(),{}) isinstance(s1, type), isinstance(s2, type)为什么第一个是false&#xff0c;第二个是true呢 根因定位&#xff1a; 在Python中&#xff0c;一切皆对象&#xff0c;类是对象&#xff0c…

Linux字符设备驱动设计

Linux字符设备驱动设计 概述 驱动的定义与功能 计算机系统中存在着大量的设备&#xff0c; 操作系统要求能够控制和管理这些硬件&#xff0c; 而驱动就是帮助操作系统完成这个任务。 驱动相当于硬件的接口&#xff0c; 它直接操作、 控制着我们的硬件&#xff0c; 操作系统通…

升级Microsoft 365后,SAP GUI中无法打开Excel的解决方案

最近&#xff0c;我们遇到了一个棘手的问题&#xff0c;一位客户在升级到Microsoft 365后&#xff0c;无法在SAP GUI中打开Excel。这个问题不仅影响了工作效率&#xff0c;也给用户的日常操作带来了不便。在本文中&#xff0c;我们将探讨问题的成因&#xff0c;并提供一种解决方…

gin自定义验证器+中文翻译

gin自定义验证器中文翻译 1、说明2、global.go3、validator.go4、eg&#xff1a;main.go5、调用接口测试 1、说明 gin官网自定义验证器给的例子相对比较简单&#xff0c;主要是语法级别&#xff0c;便于入门学习&#xff0c;并且没有给出翻译相关的处理&#xff0c;因此在这里记…

PaddleOCR_PP-Structure

静态IP设置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic IPADDR192.168.15.132 NETMASK255.255.255.0 GATEWAY192.168.15.2 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INIT…

YOLOv8小白中的小白安装环境教程!没一个字废话,看一遍不踩坑!

文章目录 去哪里下代码?怎么下代码?怎么装环境?命令行界面(CLI)指令和Python脚本区别?附录1 conda常用指令附录2 git常用指令附录3 项目代码文件作用去哪里下代码? 下载代码请大家直接去 YOLOv8的官方仓库下载,名字叫 ultralytics,有些镜像网站和个人发的等来历不明的代…

CMakeLists.txt语法规则:foreach 循环基本用法

一. 简介 cmake 中除了 if 条件判断之外&#xff0c;还支持循环语句&#xff0c;包括 foreach()循环、while()循环。 本文学习 CMakeLists.txt语法中的循环语句。 CMakeLists.txt语法中 有两种 循环实现方式&#xff1a;foreach循环与 while循环。 二. CMakeLists.txt语法规则…

解决 SyntaxError: Unexpected token ‘.‘ 报错问题

这个报错一般是编译问题&#xff0c;浏览器的版本过低没通过代码 解决办法&#xff1a; 在package.json文件中加上这个 "browserslist": ["> 1%","last 2 versions","not dead","not ie < 6","Android > 4&…

AI算法工程师课程学习-数学基础-高数1-微积分

基础数学学习目的&#xff1a;为机器学习(尤其是算法)和深度学习打基础。 学习路线&#xff1a;1.高中数学-->大学2.微积分-->3.线性代数-->4.概率论-->5.优化理论。&#xff08;因为自己40多岁年龄了&#xff0c;做了7年的.net开发&#xff0c;后面都一直在做软件…

工器具管理(基于若依)

文章目录 前言一、工器具管理项目总览 二、入库功能1. 前端1.1 界面展示1.2 具体操作实现1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具入库 三、领用功能1. 前端1.1 界面展示1.2 具体实现操作1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具领用 遇到的问题1. 同一页面展示…

2024 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第六届CCPC河南省大学生程序 设计竞赛Problem L. Toxel 与 PCPC II

//sort bug下标 遍历dp. //没修负的bug肯定连续 #include<bits/stdc.h> using namespace std; #define int long long const int n1e611; int a,b,c[n],dp[n]; signed main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>a>>b;for(int i1;…

【JVM】从可达性分析,到JVM垃圾回收算法,再到垃圾收集器

《深入理解Java虚拟机》[1]中&#xff0c;有下面这么一段话&#xff1a; 在JVM的各个区域中&#xff0c;如虚拟机栈中&#xff0c;栈帧随着方法的进入和退出而有条不紊的执行者出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的&#xff08;尽管在…

抖音上有可以长久赚钱的副业吗?当然有,只有它最稳定长久!

大家好&#xff0c;我是电商糖果 现在有很多年轻人在大城市上班&#xff0c;发现辛辛苦苦一年也赚不到多少钱。 如果说自己有了房贷&#xff0c;车贷&#xff0c;那更是一点儿不敢歇。 为了可以有更多的收入&#xff0c;年轻人都希望可以靠着下班时间&#xff0c;找一个可以…

[前后端基础]图片详解

[前后端基础]图片传输与异步-CSDN博客 https://juejin.cn/post/6844903782959022093#heading-3 base64、file和blob用JS进行互转的方法大全【前端】_js base64转blob-CSDN博客 后端存储方式 对于第一种存储方式&#xff0c;我们前端直接将存储路径赋值给 src 属性即可轻松显示。…

在go-zero中使用jwt

gozero使用jwt 两个步骤 获取token验证token 前端获取token 先编写 jwt.api 文件&#xff0c;放在api目录下 syntax "v1"info (title: "type title here"desc: "type desc here"author: "type author here"email: &quo…

【KMP算法最详细讲解】28. 实现 strStr()

实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串&#xff0c;在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在&#xff0c;则返回 -1。 示例 1: 输入: haystack "hello", needle "ll" 输出: 2 示…

C++进阶:哈希(1)

目录 1. 简介unordered_set与unordered_map2. 哈希表&#xff08;散列&#xff09;2.1 哈希表的引入2.2 闭散列的除留余数法2.2.1 前置知识补充与描述2.2.2 闭散列哈希表实现 2.3 开散列的哈希桶2.3.1 结构描述2.3.2 开散列哈希桶实现2.3.3 哈希桶的迭代器与key值处理仿函数 3.…

Spring框架概述

目录 1. Spring框架的起源 2. Spring框架的构成 3. Spring的发展历程 4. Spring的开发环境 4.1. Maven安装与配置 &#xff08;1&#xff09;Maven的下载与安装 &#xff08;2&#xff09;配置Maven的环境变量 &#xff08;3&#xff09;本地仓库的配置 &#xff08;4…