VPteam Python 問題
Task-1
你有⼀个⽬录,装了很多照⽚,把它们的尺⼨变成都不⼤于 iPhone5 分辨率的⼤⼩。
Task-2
你有⼀个⽬录,现在需要在⾥⾯⽣成100张验证码各不相同的图⽚。⽂件名就是他的验证码,并且⽣成⼀个fliename.lst
Solution-1
解题思路:
- 遍历所有图片.
- 按比例缩放图片.
- 保存图片.
确定目标:
- iPhone5 分辨率为 640x1136.
- 需要的库为
os
(文件读取) 和PIL
(图像处理).
查文档:
Image.thumbnail(size, resample=Resampling.BICUBIC, reducing_gap=2.0)
Image.resize(size, resample=None, box=None, reducing_gap=None)
Notes.
另外还查到了 Image.ANTIALIAS
(抗锯齿) 这个参数已经弃用了.
实现代码:
1 | from PIL import Image |
另外, 顺便查了一下两个API的差别:
在Pillow库中,image.thumbnail()
和 image.resize()
方法都用于调整图片的大小,但它们之间有一些关键的区别:
- 保持比例:
image.thumbnail()
方法会保持图片的原始宽高比例,而image.resize()
可以改变图片的宽高比。 - 目标尺寸:
image.thumbnail()
方法会将图片缩小到指定的最大尺寸内,但不会放大图片。如果原始图片的尺寸小于或等于目标尺寸,那么图片不会被改变。而image.resize()
方法则会直接将图片调整到指定的尺寸,无论它是放大还是缩小。 - 就地修改:
image.thumbnail()
方法会直接修改原始图片对象,不返回新的图片对象。相反,image.resize()
方法会返回一个新的图片对象,原始图片对象不会被修改。
因此,如果你想要保持图片的原始宽高比并确保图片不会被放大,应该使用 image.thumbnail()
。如果你需要将图片调整到特定的尺寸,并且不介意改变宽高比或放大图片,那么使用 image.resize()
会更合适。
Solution-2
解题思路:
- 确定目标文件夹.
- 生成验证码图片.
- 保存验证码名称.
解法-1
运用专门的第三方库生成.
需要的库:
captcha
- 一个生产验证码的库.string
- Python内置的字符串库.random
- Python内置的随机数库.os
- Python内置的操作系统接口库.
这个库的示例代码:
1 | from captcha.audio import AudioCaptcha |
代码实现:
1 | from captcha.image import ImageCaptcha |
注意别把这个python代码文件名给命名成captcha了hhh
解法-2
用 pillow
自己实现验证码的生成.
以下是一个简单的实现:
1 | from PIL import Image, ImageDraw, ImageFont, ImageFilter |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Gang の blog!