2016-09-28 19 views
0

我想用Python智能地選擇圖片的尺寸(以英寸爲單位)。如果我手動執行此操作,我會在某些照片編輯軟件中打開照片並調整圖像大小,直到看起來「很好」。智能地確定Python中的圖像大小

我在SO上看到的其他答案有預先指定的尺寸,但在這種情況下,這就是我想要程序確定的。我對圖像處理非常陌生,所以我很猶豫要更具體。然而,我想認爲我想選擇一個大小,使DPI> = 300.所有這些圖像將最終打印,這就是爲什麼我把重點放在DPI作爲一個指標。一個可怕的蠻力方法可能是:

from PIL import Image 
import numpy as np 
import bisect 

min_size = 1 
max_size = 10 
sizes = np.linspace(min_size, max_size) 
for size in sizes: 
    im = Image.open(im_name) 
    im.thumbnail((size, size), Image.ANTIALIAS) #assumes square images 
    dpi_vals.append(im.info['dpi'])) 
best_size = sizes[bisect.bisect(dpi_vals, 300)] 

這令我非常低效的,我希望更有經驗的人有一個更聰明的方法。

+0

你如何定義'好'尺寸? – MooingRawr

+0

DPI> = 300的大小。 – Jason

回答

0

我想我過早地問了一下。這更多地取決於對分辨率和DPI的理解程度,而不是程序設計。一旦我學到更多東西,答案就變得很容易。數字圖像具有分辨率,而打印的圖像具有DPI。要選擇的數字圖像的大小,使得如果打印,該圖像將具有300 DPI是簡單的:像素/ 300的PIL的特定情況下,下面的代碼正常工作:

import PIL 

im = Image.open(im_name) 
print_ready_width = im.size[0]/300 

然後如果在print_read_width處打印,圖像將具有300DPI。

1

忘了分辨率。這是一個非常令人困惑的術語。除非你掃描\打印(即使用物理介質),這並不意味着太多。

一個好的數字尺寸有以下幾點:

  • 最大的因素的2種可能。這就是爲什麼大多數標準數字分辨率(特別是在視頻中的尺寸倍數爲2^3或2^4)。數字濾波器和轉換利用這個優化
  • 源和目標圖像之間的一個簡單因素(同樣大多數爲2)。以8倍的幅度裁剪圖像幾乎總是能夠產生比7倍的效果更好的效果。大部分時間也會更快。
  • 標準寬高比。正方形,4:3,16:9。
  • 根據情況保存源圖像的寬高比。

這就是爲什麼很多網站爲您提供可調整大小的矩形框(如臉譜網圖片),這將確保高寬比與處理後的圖像相同,最小\最大尺寸符合,等等...