• 用python来分割图片


    程序思路:

         此次程序主要是利用PIL(Python Image Libraty)这库,来进行图片的处理。PIL是一个功能非常强大的python图像处理标准库,但由于PIL只支持python2.7。如今很多python程序员都使用python3.x,所以PIL在之前的基础上分离出来一个分支,另外创建一个Pillow库,以便支持python3.x, 本程序在使用之前确保已经安装了Pillow库。     

         程序首先把你要分隔的图像读取到一个变量中,然后我们定义了一个 fill_image() 方法,用来填充图像让原本大小不一的图像,重新变为一个长宽相同的正方形图像,方便之后处理。通过 fill_image() 方法,我们就会得到新的一张正方形图像。随后我们在利用 cut_image() 方法,把图像分隔成 9 张,因为微信朋友圈最多发 9张图片。

     1 from PIL import Image
     2 import sys
     3 
     4 #先将 input image 填充为正方形
     5 def fill_image(image):
     6     width, height = image.size
     7     #选取长和宽中较大值作为新图片的
     8     new_image_length = width if width > height else height
     9     #生成新图片[白底]
    10     new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')   #注意这个函数!
    11     #将之前的图粘贴在新图上,居中
    12     if width > height:#原图宽大于高,则填充图片的竖直维度  #(x,y)二元组表示粘贴上图相对下图的起始位置,是个坐标点。
    13         new_image.paste(image, (0, int((new_image_length - height) / 2)))
    14     else:
    15         new_image.paste(image, (int((new_image_length - width) / 2),0))
    16     return new_image
    17 
    18 def cut_image(image):
    19     width, height = image.size
    20     item_width = int(width / 3)  #因为朋友圈一行放3张图。
    21     box_list = []
    22     # (left, upper, right, lower)
    23     for i in range(0,3):
    24         for j in range(0,3):
    25             #print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width))
    26             box = (j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)
    27             box_list.append(box)
    28     image_list = [image.crop(box) for box in box_list]
    29     return image_list
    30 
    31 #保存
    32 def save_images(image_list):
    33     index = 1
    34     for image in image_list:
    35         image.save(str(index) + '.png', 'PNG')
    36         index += 1
    37 
    38 if __name__ == '__main__':
    39     file_path = "2.jpg"  #图片保存的地址
    40     image = Image.open(file_path)
    41     #image.show()
    42     image_new = fill_image(image)
    43     image_list = cut_image(image_new)
    44     save_images(image_list)

    如果有兴趣的话可以看一看Pillow库的使用

     

  • 相关阅读:
    elasticsearch 5.x 系列之七 基于索引别名的零停机升级服务
    Linux 查看系统硬件信息(实例详解)
    linux grep命令详解
    Boot loader: Grub进阶(转)
    Boot loader: Grub入门(转)
    内核模块管理(转)
    Centos启动流程(转)
    Linux 内核启动流程(转)
    程序的运行顺序(转)
    查询进程打开的文件(转)
  • 原文地址:https://www.cnblogs.com/tianqianlan/p/9448852.html
Copyright © 2020-2023  润新知