Python写代码生成九宫格图片

内容分享4小时前发布
0 0 0

在当今这个充满创意与视觉冲击的时代,图片处理已然成为了一门极具趣味性和实用性的艺术。其中,九宫格效果便是一种简单而又富有创意的处理方式。

我们运用九宫格效果,对图片进行巧妙的改造。所谓九宫格效果,就是在图片的横向与纵向分别精准地切割两刀。这看似简单的两刀,实则蕴含着独特的设计理念。横向的切割如同在时间的长河中划分出不同的阶段,而纵向的切割则像是在空间的维度上构建出不同的层次。

当我们对图片实施这一操作时,原本完整的一张图片便会幻化为九张图片。这九张图片并非是简单的分割,而是在保留原图片主题和色彩基调的基础上,各自形成了一个相对独立又相互关联的小画面。每一张小图片都像是一个小小的故事片段,等待着观者去解读。

经此处理,图片瞬间展现出时尚动感之姿。从视觉感受上来说,原本可能略显单调的一张大图,被分割成九张小图后,增加了画面的节奏感和韵律感。不同小图之间的排列组合,形成了一种动态的视觉效果,仿佛图片中的元素都在跳跃、舞动。这种时尚动感的呈现,使得图片更能吸引人们的目光,在众多的图片中脱颖而出。

在社交媒体盛行的当下,这种具有时尚动感的九宫格图片尤其受欢迎。它可以用于个人的朋友圈展示,让自己的生活分享变得更加生动有趣;也可以用于商业宣传,吸引消费者的注意力,提升品牌的形象和影响力。

具体效果如下图所示:通过这张图,我们可以更加直观地感受到九宫格效果给图片带来的神奇变化。每一个小格子里的画面都清晰明了,它们共同构成了一个和谐而又富有活力的整体。信任当你看到这张图时,也会被这种独特的魅力所吸引。

Python写代码生成九宫格图片

原图片

一次性生成9个图片:

实现思路如下:借助处理图片的核心库 Pillow 来读取文件,进而获取图片文件的尺寸,即高度与宽度。随后将图片均匀切割为 9 块,这一过程运用嵌套循环,分别计算各个格子的坐标,并利用 PIL 库的 crop 方法将特定区域裁剪出来,再依次保存。

其中,计算坐标堪称核心算法。以一张 500 像素×800 像素的图片为例,由于其像素数字并非 3 的整倍数,若直接除以 3 取整,必然会造成像素遗漏。例如,500 除以 3 取整为 166,而 166 乘以 3 仅得 498,这就损失了 2 个像素。为解决这一问题,需在原基础上先加 2 再除以 3 取整。

以下为完整的 Python 代码:

from PIL import Image
import os

def split_img_to_grid(image_path):
    # 1. 检查输入图片是否存在
    if not os.path.exists(image_path):
        raise FileNotFoundError(f"图片文件不存在:{image_path}")
   
    # 2. 打开图片并获取原始尺寸
    with Image.open(image_path) as img:
        img_width, img_height = img.size
        
        # 3. 计算每个小格子的尺寸(向上取整,避免遗漏像素)
        grid_width = (img_width + 2) // 3
        grid_height = (img_height + 2) // 3
        
        print(f"原始图片尺寸:
{img_width}x{img_height}
")
        print(f"每个格子尺寸:
{grid_width}x{grid_height}
")
        
        picname=os.path.split(image_path)[1].split(".")[0]
        #获取不含扩展名的文件名
        
        filepath=os.path.split(image_path)[0]
        # 4. 循环分割图片(行x列)
        for row in range(3):
            for col in range(3):
                # 分别计算每个格子的坐标
                #(左、上、右、下)
                left = col * grid_width
                top = row * grid_height
                right = min(left + grid_width, img_width)  
                # 避免超出图片边界
                bottom = min(top + grid_height, img_height)
                
                # 裁剪图片
                #(PIL的crop方法:(left, upper, right, bottom))
                cropped_img = img.crop((left, top, right, bottom))
                
                # 保存裁剪后的图片
                #(命名格式:文件名_行号_列号.扩展名)
                img_ext = image_path.split(".")[-1]  
                # 获取原图片扩展名
                save_name = f"{picname}_{row+1}_{col+1}.{img_ext}"  
                # 行号列号从1开始
                save_path = os.path.join(filepath, save_name)
                cropped_img.save(save_path)
                
                print(f"已保存:{save_name}")

if __name__ == "__main__":
    image1='E:/桌面/2/141.jpg'
    split_img_to_grid(image1)
    
#在源文件的目录下生成9个图片文件

Python写代码生成九宫格图片

Python写代码生成九宫格图片

Python写代码生成九宫格图片

© 版权声明

相关文章

暂无评论

none
暂无评论...