国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python自動裁剪圖像代碼分享

2020-02-16 10:51:59
字體:
來源:轉載
供稿:網友

本代碼可以幫你自動剪切掉圖片的邊緣空白區域,如果你的圖片有大片空白區域(只要是同一顏色形成一定的面積就認為是空白區域),下面的python代碼可以幫你自動切除,如果是透明圖像,會自動剪切大片的透明部分。

本代碼需要PIL模塊

pil相關介紹

PIL:Python Imaging Library,已經是Python平臺事實上的圖像處理標準庫了。PIL功能非常強大,但API卻非常簡單易用。

由于PIL僅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基礎上創建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了許多新特性,因此,我們可以直接安裝使用Pillow。

import Image, ImageChops def autoCrop(image,backgroundColor=None):  '''Intelligent automatic image cropping.    This functions removes the usless "white" space around an image.        If the image has an alpha (tranparency) channel, it will be used    to choose what to crop.        Otherwise, this function will try to find the most popular color    on the edges of the image and consider this color "whitespace".    (You can override this color with the backgroundColor parameter)      Input:      image (a PIL Image object): The image to crop.      backgroundColor (3 integers tuple): eg. (0,0,255)         The color to consider "background to crop".         If the image is transparent, this parameters will be ignored.         If the image is not transparent and this parameter is not         provided, it will be automatically calculated.     Output:      a PIL Image object : The cropped image.  '''     def mostPopularEdgeColor(image):    ''' Compute who's the most popular color on the edges of an image.      (left,right,top,bottom)             Input:        image: a PIL Image object             Ouput:        The most popular color (A tuple of integers (R,G,B))    '''    im = image    if im.mode != 'RGB':      im = image.convert("RGB")         # Get pixels from the edges of the image:    width,height = im.size    left  = im.crop((0,1,1,height-1))    right = im.crop((width-1,1,width,height-1))    top  = im.crop((0,0,width,1))    bottom = im.crop((0,height-1,width,height))    pixels = left.tostring() + right.tostring() + top.tostring() + bottom.tostring()     # Compute who's the most popular RGB triplet    counts = {}    for i in range(0,len(pixels),3):      RGB = pixels[i]+pixels[i+1]+pixels[i+2]      if RGB in counts:        counts[RGB] += 1      else:        counts[RGB] = 1           # Get the colour which is the most popular:        mostPopularColor = sorted([(count,rgba) for (rgba,count) in counts.items()],reverse=True)[0][1]    return ord(mostPopularColor[0]),ord(mostPopularColor[1]),ord(mostPopularColor[2])     bbox = None     # If the image has an alpha (tranparency) layer, we use it to crop the image.  # Otherwise, we look at the pixels around the image (top, left, bottom and right)  # and use the most used color as the color to crop.     # --- For transparent images -----------------------------------------------  if 'A' in image.getbands(): # If the image has a transparency layer, use it.    # This works for all modes which have transparency layer    bbox = image.split()[list(image.getbands()).index('A')].getbbox()  # --- For non-transparent images -------------------------------------------  elif image.mode=='RGB':    if not backgroundColor:      backgroundColor = mostPopularEdgeColor(image)    # Crop a non-transparent image.    # .getbbox() always crops the black color.    # So we need to substract the "background" color from our image.    bg = Image.new("RGB", image.size, backgroundColor)    diff = ImageChops.difference(image, bg) # Substract background color from image    bbox = diff.getbbox() # Try to find the real bounding box of the image.  else:    raise NotImplementedError, "Sorry, this function is not implemented yet for images in mode '%s'." % image.mode       if bbox:    image = image.crop(bbox)       return image   #范例:裁剪透明圖片:im = Image.open('myTransparentImage.png')cropped = autoCrop(im)cropped.show() #范例:裁剪非透明圖片im = Image.open('myImage.png')cropped = autoCrop(im)cropped.show()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宝鸡市| 仙游县| 宁阳县| 谢通门县| 克拉玛依市| 定日县| 六盘水市| 广州市| 增城市| 黄大仙区| 五原县| 米脂县| 依安县| 咸阳市| 抚州市| 延川县| 鹤峰县| 甘德县| 金秀| 富川| 儋州市| 通许县| 大石桥市| 瑞昌市| 黄平县| 长宁县| 长春市| 黎城县| 正宁县| 浙江省| 宁海县| 垦利县| 文安县| 青州市| 新乡市| 綦江县| 扶余县| 黑水县| 柳河县| 四子王旗| 望奎县|