网站如何备案流程,无锡门户网站制作电话,wordpress 标签禁用,wordpress微信模板Abstract
PIL(Python Imaging Library)是一个用于图像处理的 Python 库。它提供了广泛的功能#xff0c;包括图像加载、保存、调整大小、裁剪、旋转、滤镜应用等。
由于 PIL 的开发停止在 2009 年#xff0c;因此推荐使用其后续的维护版本 Pillow。Pillow 是一个兼容 PIL 接…Abstract
PIL(Python Imaging Library)是一个用于图像处理的 Python 库。它提供了广泛的功能包括图像加载、保存、调整大小、裁剪、旋转、滤镜应用等。
由于 PIL 的开发停止在 2009 年因此推荐使用其后续的维护版本 Pillow。Pillow 是一个兼容 PIL 接口的现代图像处理库提供更多功能和更好的性能。
以下是一些常见的 PIL/Pillow 操作示例
1. 加载和保存图像
from PIL import Imageimage Image.open(image.jpg) # 打开图像文件
print(type(image))image.save(output.jpg) # 保存图像文件输出
class PIL.JpegImagePlugin.JpegImageFile注意这里的 Image 是一个模块而不是一个 class。image 是一个 JpegImageFile 类的实例查看文件发现 image.save(fp, ...) 是类 Image.Image 的方法可知 JpegImagePlugin.JpegImageFile 继承自 Image.Image 于是猜测 Image.Image 是一个操作图象的基本类由于图片有不同的格式就诞生了各种类似 JpegImagePlugin.JpegImageFile 的更具体的类。查看包 PIL 的内容果然发现是这样的
_plugins [BlpImagePlugin,BmpImagePlugin,BufrStubImagePlugin,...XbmImagePlugin,XpmImagePlugin,XVThumbImagePlugin,
]各种 xxxImagePlugin 下应该有各种图片格式对应的 xxxImageFile 类吧
2. 调整图像大小
from PIL import Imageimage Image.open(image.jpg) # 打开图像文件
print(image.size) # (96, 96)
resized_image image.resize((800, 600)) # 调整图像大小为指定尺寸
resized_image.show() # 展示图像首选image.resize(...) 返回了一个新的 Image 对象后面会看到各种类似的 image.xxx(...) 方法都会返回新的对象。
这里的问题是改变图片的尺寸是怎么做的会丢失图片信息吗 Resampling.NEAREST 是 PIL/Pillow 库中的一个枚举值用于指定图像调整大小时使用的最近邻插值方法。 在调整图像大小时插值是一种用于估计新像素值的技术。最近邻插值是一种简单的插值方法它通过选择最接近目标位置的原始像素值作为新像素值来进行插值。 最近邻插值方法不会对原始像素进行平滑处理或插值计算而是直接从最接近的原始像素中选择一个作为新像素值。这使得最近邻插值方法在一些情况下可能产生锯齿状的边缘或粗糙的图像。 以下是使用 resize() 函数和 Resampling.NEAREST 进行最近邻插值的示例 from PIL import Imageimage Image.open(image.jpg) # 打开图像文件
# 使用最近邻插值方法调整图像大小
image.resize((800, 600), resampleImage.Resampling.NEAREST).show()在上面的示例中resize() 函数的参数 resample 被设置为 Image.Resampling.NEAREST表示使用最近邻插值方法进行图像调整大小。调整后的图像将保留原始像素中最接近目标位置的值作为新像素值。 需要注意的是最近邻插值方法相对简单且计算效率较高但在某些情况下可能会导致图像质量的损失。如果需要更平滑和高质量的结果可以尝试其他插值方法如双线性插值 (Resampling.BILINEAR) 或双三次插值 (Resampling.BICUBIC)。根据具体需求选择合适的插值方法可以获得更好的图像调整大小效果。 更多关于插值的内容可参考博文《【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值》。
3. 裁剪图像
from PIL import Imageimage Image.open(image.jpg) # 打开图像文件
# 裁剪图像
image.crop((100, 100, 300, 300)).show() # 坐标为左上角 (100, 100)右下角 (300, 300)4. 旋转图像
from PIL import Imageimage Image.open(image.jpg) # 打开图像文件
# 旋转图像 90 度
image.rotate(90).show()图片的旋转还有有一个函数 image.transpose(...)
image.transpose(Image.ROTATE_90).show()实现了一样的旋转效果。不一样的地方在于
rotate(angle: float)
transpose(self, method: Literal[0, 1, 2, 3, 4, 5, 6] | Transpose)rotate 接收一个 float 参数表示旋转的角度(任意)而 tranpose 更像是 “矩阵旋转”接收一个枚举值 Literal[i]也表示旋转的角度但只有
ROTATE_90: Literal[2]
ROTATE_180: Literal[3]
ROTATE_270: Literal[4]三个旋转角度可选完整的枚举为
class Transpose(IntEnum):FLIP_LEFT_RIGHT: Literal[0]FLIP_TOP_BOTTOM: Literal[1]ROTATE_90: Literal[2]ROTATE_180: Literal[3]ROTATE_270: Literal[4]TRANSPOSE: Literal[5]TRANSVERSE: Literal[6]还包含了上下、左右翻转等操作。
5. 滤镜效果
from PIL import Image, ImageFilterimage Image.open(image.jpg) # 打开图像文件
# 应用高斯模糊滤镜
image.filter(ImageFilter.GaussianBlur(radius2)).show()高斯模糊(Gaussian Blur)是一种常见的图像滤镜算法用于对图像进行平滑处理。它通过在图像上应用高斯核函数来实现模糊效果从而减少图像中的噪点和细节。
radius 参数指定了高斯核的大小控制了模糊程度。较大的 radius 值会导致更强烈的模糊效果。
除了 PIL/Pillow 库其他图像处理库如 OpenCV、scikit-image 等也提供了类似的功能来实现高斯模糊滤镜。具体的使用方法可能会有所不同但基本原理和效果是相似的。