python——批量裁取图,获取文件夹中所有图片名,把多个图片合成gif

1、批量截图(截取正方形图,哪个边短就用哪个边作为标准来截取)

在这里插入图片描述
功能是裁取图片中红色框的部分。
代码为: (注释已经写得很详细了,这里就不进行代码的讲解了)

import sys
from tkinter.tix import Tk
from PIL import Image
import os
import tkinter


# 获取文件夹中所有图片名
def getFileName(filePath):
    # file_dir = r"D:\\image123"
    file_dir = filePath
    i = 1
    imageNameList = None
    for root, dirs, files in os.walk(file_dir):
        # print(i)
        i += 1
        # print(root) #当前目录路径
        # print(dirs) #当前路径下所有子目录
        # print(files) #当前路径下所有非目录子文件
        imageNameList = files

    # print('所有的文件名为:', fileNameList)
    return imageNameList


# 裁剪正方形图,哪个边短就用哪个边作为标准来截取
def cutImage(path, imageName):
    # img = Image.open("D://image123//1.png")
    # print('文件名为:', path + imageName)
    img = Image.open(path + imageName)
    # 图片的宽度和高度
    img_size = img.size
    # print("图片宽度和高度分别是{}".format(img_size))

    cutSize = img_size[0] if (img_size[0] < img_size[1]) else img_size[1]

    if (img_size[0] > img_size[1]):  # 宽比高长
        startX = (img_size[0] - img_size[1]) / 2  # 计算中间的位置
        # 截取中间的位置图片
        cropped = img.crop((startX, 0, cutSize + startX, cutSize))  # (left, upper, right, lower)
    else:  # 高比宽长
        startY = (img_size[1] - img_size[0]) / 2  # 计算中间的位置
        # 截取中间的位置图片
        cropped = img.crop((0, startY, cutSize, cutSize + startY))  # (left, upper, right, lower)

    # 判断 D://cut_ok 目录是否存在,不存在则新建
    if not os.path.exists('D://cut_ok'):
        os.makedirs('D://cut_ok')
    # 保存图片
    cropped.save("D://cut_ok//" + imageName)


def start(filePath):
    print("路径==:", filePath)
    allImage = getFileName(filePath)
    for fileName in allImage:
        print(fileName)
        # cutImage("D://image123//", fileName)
        cutImage(filePath+"//", fileName)


if __name__ == '__main__':
    if hasattr(sys, 'frozen'):
        os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
    # 界面****begin
    window = Tk()
    window.geometry("300x100")
    # L1 = tkinter.Label(window, text="文件夹名:")
    # L1.pack()

    E1 = tkinter.Entry(window, bd=3, )
    E1.pack()

    # 获取输入框的值:E1.get()
    B = tkinter.Button(window, text="开始剪切", command=lambda: start(E1.get()))
    B.pack()

    L1 = tkinter.Label(window, text="完成的图片在 D://cut_ok")
    L1.pack()
    # 界面****end

    # 进入消息循环
    window.mainloop()

2、把多个图片合成gif

背景:需要把图片放在D盘的zhuo_mian_wen_dang文件夹里面,然后图片命名分别为1.png 2.png 3.png

代码为:

import imageio
# 需要合在一起的图片D盘中:1.png   2.png   3.png
image_list = [r'D:\zhuo_mian_wen_dang\\' + str(x) + ".png" for x in range(1, 4)]
# gif的图片名
gif_name = r'D:\zhuo_mian_wen_dang\\test_gif.gif'

frames = []
for image_name in image_list:
    frames.append(imageio.imread(image_name))

# druation : 图片切换的时间,单位秒
imageio.mimsave(gif_name, frames, 'GIF', duration=0.8)
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wy313622821

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值