1. 确定图像格式
支持的图像格式
Pillow 支持处理多种图像格式,包括:
- JPEG (JPG): 最流行的照片格式之一。通过有损压缩减少文件大小,但不支持透明度。
- PNG: 无损格式,支持透明(alpha通道)。适用于logo、icon,以及需要高清晰度的图片。
- BMP: 不压缩的高质量格式,但文件大小较大。支持透明度。
- TIFF: 常用于存储无损图像,广泛应用于印刷行业。
- WEBP: 现代高压缩率格式,支持透明度。非常适合网络图像,因为它在保持高质量的同时文件大小较小。
加载图像进行转换
在转换图像之前,需要使用 Image.open()
方法加载图像。
from PIL import Image
# 打开图像
image = Image.open("example.jpg")
print(image.format) # 检查图像的原始格式
2. 转换图像格式
save()
方法允许通过更改文件名扩展名或显式指定格式来保存图像为不同的格式。
将 JPEG 转换为 PNG
将图像从 JPEG 转换为 PNG,只需在保存文件时指定新扩展名:
# 将图像保存为 PNG 格式
image.save("example_converted.png")
此代码将图像从 JPEG 格式转换为 PNG 格式,并将其保存为指定名称。PNG 非常适合保存无损图像,同时支持透明区域。
将 PNG 转换为 JPEG
也可以将 PNG 转换为 JPEG,但需要注意的是,JPEG 不支持透明度。转换时,透明区域会被填充为白色。
# 将 PNG 转换为 JPEG(透明部分将变为白色背景)
image = image.convert("RGB") # 切换到 JPEG 需要的 RGB 模式
image.save("example_converted.jpg", "JPEG")
convert("RGB")
方法将图像转换为 RGB 模式,这是保存为 JPEG 格式所需的。
3. 管理图像质量
为了优化图像,Pillow 提供了 quality
和 optimize
参数,可用于控制质量和文件大小。对于处理 JPEG 和 PNG 格外有用。
优化和管理 JPEG 质量
保存为 JPEG 格式时,quality
参数控制压缩程度。质量越高,文件大小越大,图像质量也越高。quality
的值在 1 到 95 之间(默认值为 75)。
# 保存为质量降低的 JPEG 图像
image.save("example_compressed.jpg", "JPEG", quality=85)
此代码以 85 的质量保存图像,通常可以在保持高质量的同时显著减少文件大小。如果需要更低的质量(例如创建缩略图),可以指定 quality = 50
。
优化 PNG
对于 PNG,设置 optimize = True
可进行无损压缩,从而移除冗余数据。这对于在网络中发布图片特别有用。
# 保存优化过的 PNG
image.save("example_optimized.png", "PNG", optimize=True)
优化 PNG 有助于在保持高质量的前提下减少文件大小,这对于logo和icon特别重要,文件大小每减少一千字节也很关键。
比较不同压缩质量下的 JPEG
我们来看看quality
参数的不同设置如何影响文件大小和图像质量。
# 用不同质量保存 JPEG 图像
image.save("quality_95.jpg", "JPEG", quality=95)
image.save("quality_75.jpg", "JPEG", quality=75)
image.save("quality_50.jpg", "JPEG", quality=50)
在这个示例中,我们以 95、75 和 50 三种质量保存同一图像。95 质量的图像几乎与原始图像无异,但占用更大的存储空间,而 50 质量则会显著压缩,可能出现明显细节丢失。
4. 使用 WebP 格式
WebP 是一种现代格式,支持有损和无损压缩,以及透明度。它在网络上使用广泛,因为它具有较高的压缩效率。
将图像转换为 WebP 格式
# 将图像转换为 WebP 格式
image.save("example.webp", "WEBP", quality=80)
在这个例子中,我们以质量为80保存图像,转换为 WebP 格式。与 JPEG 或 PNG 相比,WebP 能在类似质量下显著减小文件大小。
完整优化转换示例
现在我们将整合所有方法,创建一个脚本,将图像转换为多种格式并优化。
from PIL import Image
# 打开图像
image = Image.open("example.jpg")
# 转换为优化后的 PNG
image.save("converted_optimized.png", "PNG", optimize=True)
# 转换为质量降低的 JPEG
image_rgb = image.convert("RGB") # JPEG 需要的 RGB 模式
image_rgb.save("converted_compressed.jpg", "JPEG", quality=85)
# 转换为优化的 WebP 格式
image_rgb.save("converted_optimized.webp", "WEBP", quality=80)
在这个示例中:
- 我们将图像转换为经过优化的 PNG,有助于在无损的前提下减少文件大小。
- 以 85 的质量保存为 JPEG 格式,这能保证高质量并显著减少文件大小。
- 将图像转换为 WebP 格式,非常适合在网络上发布图片,保持高质量同时文件体积较小。
GO TO FULL VERSION