当前位置: 首页 > news >正文

用Python合成瀑布流图片

Talk is cheap, show the code:

import glob
import random
from PIL import Imagedef create_collage(image_folder, output_path, num_columns=4, column_width=300, margin=10, background_color=(255, 255, 255)):# 1. 获取当前目录下的所有图片image_paths = glob.glob(image_folder + '/*')random.shuffle(image_paths)  # 随机排序图片以创建变化效果# 2. 加载所有图片并调整大小images = []for path in image_paths:try:img = Image.open(path)# 保持原始比例调整宽度aspect_ratio = img.height / img.widthnew_height = int(column_width * aspect_ratio)resized_img = img.resize((column_width, new_height), Image.LANCZOS)images.append(resized_img)except Exception as e:print(f'无法加载图片 {path}: {str(e)}')if not images:raise ValueError('没有有效的图片可以处理')# 3. 初始化列高列表column_heights = [margin] * num_columnsplaced_images = []  # 存储(图片, 位置x, 位置y)# 4. 瀑布流排列算法for img in images:# 寻找最短列min_height = min(column_heights)col_idx = column_heights.index(min_height)# 计算位置坐标x = col_idx * (column_width + margin) + marginy = column_heights[col_idx]# 记录图片位置placed_images.append((img, x, y))# 更新列高度column_heights[col_idx] = y + img.height + margin# 5. 创建画布canvas_width = column_width * num_columns + margin * (num_columns + 1)canvas_height = max(column_heights)collage = Image.new('RGB', (canvas_width, canvas_height), background_color)# 6. 将图片粘贴到画布for img, x, y in placed_images:collage.paste(img, (int(x), int(y)))# 7. 保存结果collage.save(output_path, quality=95)print(f'瀑布流拼贴已保存到 {output_path}')if __name__ == '__main__':create_collage(image_folder='images',output_path='waterfall_collage.jpg',num_columns=8,     # 列数column_width=300,  # 每列宽度margin=15,         # 图片间距background_color=(240, 240, 240)  # 浅灰色背景)

运行结果:

瀑布流图片

http://www.lryc.cn/news/627072.html

相关文章:

  • 【数据类型】
  • python的物资管理系统
  • Linux服务器性能优化总结
  • 压缩--RAR、7-Zip工具使用
  • Kafka如何保证「消息不丢失」,「顺序传输」,「不重复消费」,以及为什么会发生重平衡(reblanace)
  • 中国大学MOOC-C语言第九周指针(上)
  • 360报毒HEUR/QVM03.0.7EBB.Malware.Gen问题
  • lock4j 库中的 @Lock4j 注解进行全面的概述和深度的源码级剖析。
  • Ubuntu实现程序开机自动运行
  • Windows 如何清理右键菜单?电脑桌面右键菜单里出现一个清理内存 怎么去掉?
  • 强制重启导致Ubuntu24.04LTS amd的WIFI无法使用的解决方案
  • 电芯自动分选装盒机:高效整合分选与包装的智能化解决方案
  • unfold 切图像,图形transformer的切割操作
  • 【蒸蒸日上】军八武将篇——标1
  • 仿真驱动的AI自动驾驶汽车安全设计与测试
  • 30.Linux cobbler自动化部署
  • 计算机网络基础复习
  • 对象存储 COS 端到端质量系列——终端 COS SDK 网络优化
  • 【自记】Power BI 中 ALL、ALLSELECTED、ALLEXCEPT、ALLNOBLANKROW 的区别说明
  • Python打卡Day47 注意力热图可视化
  • 分享一个基于spark大数据的海洋塑料污染监测与可视化分析系统 基于Python的海洋塑料污染数据交互式可视化分析系统
  • Qwen Image edit的ComfyUI工作流搭建
  • 2025招商铸盾车联网CTF竞赛初赛题解
  • IT运维背锅权限泄露?集中式管控如何化解风险?
  • Docker Compose命令一览(Docker Compose指令、docker-compose命令)
  • Javascript面试题及详细答案150道之(121-135)
  • Linux Capability 解析
  • 达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
  • Java 通过 m3u8 链接下载所有 ts 视频切片并合并转换为 mp4 格式
  • 齐次线性方程组最小二乘解