Python切分图片,组成动图

       经过520、521的洗礼,我想我必须为522做点什么了,毕竟522也是传说中的黑客情人节嘛。这里想到了之前的一个段子,我再次从网上将原图扒拉了出来。在这个传说中的节日里,能不能搞点事情?这么长的图看起来着实费力,能不能通过一定的手段将长图分割,然后重组成动图呢?这就是本文的目的……这里解释一下,因为522那天小编家里有急事,所以一直拖到今天才将这篇博客贴出来,没关系,这也是一种缺憾美吧~


一、裁剪图片

       Python的PIL模块是处理图片的一大利器,我们可以使用Image.crop()对图片进行裁剪。下面是图片裁剪的方法:

def split_long_image(self):
    '''
    切分长图并保存
    :return:
    '''
    os.chdir(self.path)  # 将工作目录更改为图片的目录路径
    try:
        os.makedirs('images')  # 新建目录images
    except FileExistsError:  # 定义文件存在的异常
        pass

    width, height = self.image.size  # 获取文件的宽和高
    __split_height = height / self.split_times  # 获取每次切分的高度

    for image in range(self.split_times):  # 获取图片并保存
        # 划定每张图片的大小
        __crop_box = (0, __split_height * image, width * 0.8, __split_height * (image + 1))
        # 得到每张图片
        __per_picture = self.image.crop(__crop_box)
        __picture_name = os.path.join(self.path, 'images', "image%d.png" % (image + 1))
        self.pictures.append(__picture_name)
        __per_picture.save(__picture_name)

       通过以上方法对长图进行切分,可以得到如下所示的多张图片:

二、图片合并成GIF动态图

       既然图片已经切分完毕,那么将切分的图片合并成一个动态图就显的十分有必要了,以下是合并的方法:

def get_gif(self):
    '''
    静图转换成动图
    :return:
    '''
    images = []
    file = Image.open(self.pictures[0])
    for image in self.pictures[1:]:
        images.append(Image.open(image))
    gif_name = os.path.join(self.path, "result.gif")
    file.save(gif_name, save_all=True, loop=True, append_images=images, duration=self.change_time * 1000)

三、动态传参

       这里为了使程序有更强的复用性,选择动态传参的方法进行参数传递,这就涉及到了argparse库,argparse是Python内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse将会从sys.argv中解析出这些参数,并自动生成帮助和使用信息。其基本使用方法如下所示:

# 创建一个解析对象
parser = argparse.ArgumentParser()
# 向创建的解析对象中添加命令行参数和选项
parser.add_argument('-i', '--image_path', help="需要进行分割操作的图片路径")
parser.add_argument('-s', '--split_times', type=int, help="图片分隔次数")
parser.add_argument('-c', '--change_time', type=float, help="GIF动图切换时长")
# 解析
args = parser.parse_args()

四、运行程序

       最后,就是整个代码的测试环节了,命令行运行语句,得到结果如下所示:

python C://Users//Machenike//Desktop//SplitImagetoGif.py -i C://Users//Machenike//Desktop//image//hkqrj.jpg -s 16 -c 1

python C://Users//Machenike//Desktop//SplitImagetoGif.py -i C://Users//Machenike//Desktop//file//hkxdn.jpg -s 15 -c 1

       怎么样?这个动图看起来是不是比之前的长图好多了?聪明的人都是选择这样过522的,哈哈哈~这时候大家就会存在一个疑惑,你所说的长图到底是什么样的呢?别急,既然都到这里了,那么源码奉上,原始长图同样奉上,请猛戳这里

猜你喜欢

转载自blog.csdn.net/gdkyxy2013/article/details/106327540