2011-12-16 16 views
1

我想拇指和裁剪到所需的大小。它工作正常,但如果我的新的拇指區域小於裁剪區域,所有空白區域都會填充黑色。 代碼:Python PIL:圖像作物與黑色區域,如果沒有足夠的照片區域

import os 
from PIL import Image 

def resize(file_path): 
    file, ext = os.path.splitext(file_path) 
    im = Image.open(file_path) 
    size = (100, 'auto') 
    new_path = file + "_.jpg" 
    im.thumbnail(size, Image.ANTIALIAS) 
    region = im.crop((0, 0, 100, 100)) 
    region.save(new_path, "JPEG") 

也許有像MAX_HEIGHT作物的方法或別的一些選項?

謝謝! enter image description here

+1

運行縮略圖()處理後,什麼是做作物的預期格式?在這種情況下,圖像的高度小於100,那麼它應該填充那個空間?或者你是否正在尋找一種中心提取方式,從中挖出寬度以適應高度? – jdi 2011-12-16 06:19:35

回答

1

您是否試圖有條件裁剪圖像,如果它的LARGER大於100x100? 如果是這樣,

def resize(file_path): 
    file, ext = os.path.splitext(file_path) 
    im = Image.open(file_path) 
    size = (100, 'auto') 
    new_path = file + "_.jpg" 
    im.thumbnail(size, Image.ANTIALIAS) 
    if im.size[1] > 100: 
     im = im.crop((0, 0, 100, 100)) 
    im.save(new_path, "JPEG") 
+0

當我寫作我的時候,你已經發布了你的答案:)但是,謝謝! – 2011-12-16 06:33:07

2

您將需要應用一些簡單的算法,而不是盲目裁剪。

  • 獲得圖像中可能的最大尺寸的平方,方形中心與圖像中心對齊。 最大尺寸的正方形的邊長等於圖像高度或寬度的最大值。

  • 獲取正方形後,將其重新取樣爲縮略圖尺寸的大小。

  • 這對大多數圖像應該可以正常工作,但是如果您爲臉部圖像生成縮略圖,這可能不是一個好方法,並且您可能需要一些面部識別技術來獲得更好的輸出效果。
0

我找到了解決辦法:

import os 
from PIL import Image 

def resize(file_path): 
    file, ext = os.path.splitext(file_path) 
    im = Image.open(file_path) 
    size = (100, 'auto') 
    new_path = file + "_.jpg" 
    im.thumbnail(size) 
    (width, height) = im.size 
    if height >= width: box = (0, 0, 100, 100) 
    else: box = (0, 0, 100, height) 
    region = im.crop(box) 
    region.save(new_path, "JPEG") 

感謝您的答覆!

1

我會做這種方式:

  • 如果圖像寬,那麼它的規模是100像素高。如果它很高,則將其縮放爲100px寬。

  • 裁剪中間100x100。

    def resize(file_path): 
        file, ext = os.path.splitext(file_path) 
        im = Image.open(file_path) 
        w, h = im.size 
        size = (100, 'auto') if h > w else ('auto', 100) 
        new_path = file + "_.jpg" 
        im.thumbnail(size, Image.ANTIALIAS) 
        w, h = im.size 
        region = im.crop((w/2 - 50, h/2 - 50, w/2 + 50, h/2 + 50)) 
        region.save(new_path, "JPEG")