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的,哈哈哈~這時候大家就會存在一個疑惑,你所說的長圖到底是什麼樣的呢?別急,既然都到這裏了,那麼源碼奉上,原始長圖同樣奉上,請猛戳這裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章