我想用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 :(得分:1)
忘了dpi。这是一个非常混乱的术语。除非你扫描\ print(即使用物理介质),否则这并不意味着什么。
良好的数字维度具有以下内容:
这就是为什么很多网站都为你提供了一个可调整大小的矩形\方形框用于某些照片(如facebook个人资料图片),这将确保宽高比与处理过的图像相同,即最小\最大尺寸得到满足等等......
答案 1 :(得分:0)
我想我过早地问了一下。这更多地取决于理解分辨率与DPI,而不是编程。一旦我学到了更多,答案变得非常简单。数字图像具有分辨率,而打印图像具有DPI。要选择数字图像的大小,如果打印,该图像将具有300 DPI就像:pixel / 300一样简单。在PIL
的特定情况下,以下代码可以正常工作:
import PIL
im = Image.open(im_name)
print_ready_width = im.size[0] / 300
如果在print_read_width
打印,图像将具有300 DPI。