可以说,每一个“使用计算机的人”都需要在某个时间点调整图像的大小。MacOS的预览版可以做到,WindowsPowerToys也可以。
本文使用Python来调整图像大小,幸运的是,图像处理和命令行工具是Python的两个特长。
本文旨在向你展示三件事:
图像的基本概念。用于操作图像的Python库。你可以在自己的项目中使用本文的代码。我们要构建的命令行程序可以一次调整一个或多个图像文件的大小。
创建图像
在这个例子中,我们将创建我们自己的图像,而不是找到一个真正的图像来操纵。
为什么?事实上,创造图像是一个很好的方式来说明一个图像实际上是什么。这个调整大小的程序在Instagram上也同样适用。
那么,什么是图像?在Python数据术语中,图像是int元组的列表。
image = list[list[tuple[*int, float]]]NumPy的定义是一个二维形状数组 (h, w, 4),其中h表示高的像素数(上下),w表示宽的像素数(从左到右)。
换句话说,图像是像素列表(行)的列表(整个图像)。每个像素由3个整数和1个可选浮点数组成:红色通道、绿色通道、蓝色通道、alpha(浮点可选)。红色、绿色、蓝色通道(RGB)的值从0到255。
从现在开始,我们将讨论没有alpha通道的彩色图像,以保持简单。Alpha是像素的透明度。图像也只能有一个值从0到255的通道。这就是灰度图像,也就是黑白图像。在这里我们使用彩色图像!
import matplotlib as pltpixel: tuple = (200, 100, 150)plt.imshow([[list(pixel)]])
用纯Python制作图像
Python完全能够创建图像。要显示它,我将使用matplotlib库,你可以使用它安装:
pip install matplotlib创建像素:
from dataclasses import dataclass@dataclassclass Pixel: red: int green: int blue: int # alpha: float = 1pixel = Pixel(255,0,0)pixel# returns: # Pixel(red=255, green=0, blue=0, alpha=1)创建图像:
from __future__ import annotationsfrom dataclasses import dataclass, astuplefrom itertools import cyclefrom typing import Listimport matplotlib.pyplot as pltimport matplotlib.image as mpimg@dataclassclass Pixel: red: int green: int blue: int # alpha: float = 1pixel = Pixel(255,0,0)pixelmarigold: Pixel = Pixel(234,162,33)red: Pixel = Pixel(255,0,0)Image = List[List[Pixel]]def create_image(*colors: Pixel, blocksize: int = 10, squaresize: int = 9) -> Image: """ 用可配置的像素块制作一个正方形图像(宽度和高度相同). Args: colors (Pixel): 可迭代的颜色呈现顺序的参数。 blocksize (int, optional): [description]. 默认10. squaresize (int, optional): [description]. 默认9. Returns: Image: 一幅漂亮的正方形图片!