
文章插图
可以说 , 每一个“使用计算机的人”都需要在某个时间点调整图像的大小 。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: intgreen: intblue: 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: intgreen: intblue: 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: 一幅漂亮的正方形图片!"""img: list = []colors = cycle(colors)for row in range(squaresize):row: list = []for col in range(squaresize):color = next(colors) # 设置颜色for _ in range(blocksize):values: list[int] = list(astuple(color))row.Append(values)[img.append(row) for _ in range(squaresize)] # 创建行高return imgif __name__ == '__main__':image = create_image(marigold, red)plt.imshow(image)

文章插图
这就是渲染的图像 。在背后 , 数据是这样的:
[[[234, 162, 33],[234, 162, 33],[234, 162, 33],[234, 162, 33],[234, 162, 33],[234, 162, 33],[234, 162, 33],[234, 162, 33],[234, 162, 33],[234, 162, 33],[255, 0, 0],[255, 0, 0],[255, 0, 0],[255, 0, 0],[255, 0, 0],[255, 0, 0],[255, 0, 0],[255, 0, 0],[255, 0, 0],[255, 0, 0],[234, 162, 33],...
现在我们有了一个图像 , 让我们调整它的大小!在Python中调整大小在Python中编写调整图像大小的算法实际上有很多的工作量 。
【使用Python调整图像大小】在图像处理算法中有很多内容 , 有些人为此贡献了十分多的工作 。例如重采样——在缩小后的图像中使用一个像素来代表周围的高分辨率像素 。图像处理是一个巨大的话题 。如果你想亲眼看看 , 看看Pillow的Image.py , 它在路径path/to/site-packages/PIL中 。
这中间还有一些优化 , 比如抗锯齿和减少间隙…这里的内容非常多 。我们是站在巨人的肩膀上 , 可以用一行代码来解决我们的问题 。
推荐阅读
- 原来这才是Spring Boot使用AOP的正确姿势
- 手写Redis分布式锁
- 使用spring cache让我的接口性能瞬间提升了100倍
- 如何使用软路由实现宽带加速,免费让300M宽带变600M
- 使用 Python 自动发送 QQ 消息
- 人人都能掌握的Chrome使用技巧
- 如果C++最强大,为什么它不及Java、Python流行?
- Android Hawk框架使用介绍
- python 中日志异步发送到远程服务器
- 使用Docker来构建、运行、发布微服务