易企网络网站建设微信可以怎么创建账户网站
2026/4/18 17:20:45 网站建设 项目流程
易企网络网站建设,微信可以怎么创建账户网站,小程序开发公司米云,湖北省建筑特种作业人员证书Day 42#xff1a;【99天精通Python】图像处理 (Pillow) - 打造你的专属美图秀秀 前言 欢迎来到第42天#xff01; 在日常工作中#xff0c;我们经常需要处理图片#xff1a;把 100 张大图缩小成缩略图、给证件照换底色、或者给公司所有的宣传图批量加上水印。如果一张张手…Day 42【99天精通Python】图像处理 (Pillow) - 打造你的专属美图秀秀前言欢迎来到第42天在日常工作中我们经常需要处理图片把 100 张大图缩小成缩略图、给证件照换底色、或者给公司所有的宣传图批量加上水印。如果一张张手动用 PS 处理那真是要累断手。Python 有一个非常强大的图像处理库——Pillow(PIL Fork)。它提供了广泛的文件格式支持、强大的图像处理能力API 却非常简单易用。有了它你就是代码界的修图师。本节内容Pillow 安装与基本操作图像的缩放、旋转与裁剪常用滤镜 (模糊、轮廓)图像格式转换 (JPG 转 PNG)绘制文字 (添加水印)实战练习批量图片水印生成器一、初识 PillowPillow 是 Python Imaging Library (PIL) 的一个友好分支依然使用PIL作为包名。安装pipinstallPillow1.1 打开与显示图片我们需要一张测试图片假设名为test.jpg。fromPILimportImage# 1. 打开图片# img 是一个 Image 对象try:imgImage.open(test.jpg)exceptFileNotFoundError:print(图片未找到请准备一张 test.jpg)exit()# 2. 查看属性print(f格式:{img.format})# JPEGprint(f尺寸:{img.size})# (1920, 1080) - (宽, 高)print(f模式:{img.mode})# RGB# 3. 显示图片 (会调用系统默认图片查看器打开)img.show()1.2 格式转换与保存# 另存为 PNGimg.save(test.png)# 转换模式 (如转为灰度图)# L 表示灰度模式grey_imgimg.convert(L)grey_img.save(test_grey.jpg)二、图像变换剪裁、旋转、缩放2.1 缩放 (Resize)改变图片大小是刚需。Pillow 提供了resize和thumbnail两种方法。# 1. resize: 强制改变大小 (可能会变形)# 注意参数是一个元组 (width, height)new_imgimg.resize((300,200))new_img.show()# 2. thumbnail: 等比缩放 (制作缩略图)# 它会原地修改对象且保持长宽比不会超过指定尺寸img.thumbnail((300,300))img.save(thumbnail.jpg)2.2 裁剪 (Crop)# 定义裁剪区域: (左, 上, 右, 下)# 坐标原点 (0,0) 在左上角box(100,100,500,500)regionimg.crop(box)region.show()2.3 旋转与翻转 (Rotate Transpose)# 旋转 45 度img.rotate(45).show()# 左右镜像翻转img.transpose(Image.FLIP_LEFT_RIGHT).show()# 上下翻转# img.transpose(Image.FLIP_TOP_BOTTOM).show()三、神奇滤镜 (Filters)想给照片加点特效ImageFilter模块内置了多种滤镜。fromPILimportImageFilter# 高斯模糊 (Radius 指定模糊程度)blur_imgimg.filter(ImageFilter.GaussianBlur(radius5))blur_img.show()# 轮廓滤镜 (也就是线稿风格)contour_imgimg.filter(ImageFilter.CONTOUR)contour_img.show()# 锐化sharp_imgimg.filter(ImageFilter.SHARPEN)四、实战给图片加水印这是最实用的功能之一。我们需要用到ImageDraw(画笔) 和ImageFont(字体)。4.1 绘制文字fromPILimportImage,ImageDraw,ImageFont# 1. 打开底图base_imgImage.open(test.jpg)# 2. 创建一个可以在 base_img 上绘画的对象drawImageDraw.Draw(base_img)# 3. 加载字体# Windows 字体路径通常在 C:/Windows/Fonts/# Mac/Linux 请替换为你的字体路径# 如果找不到字体可以用默认字体 load_default()但不支持中文try:# 这里的 50 是字号fontImageFont.truetype(arial.ttf,50)exceptIOError:fontImageFont.load_default()# 4. 绘制文字# xy: 坐标, text: 内容, fill: 颜色(RGB), font: 字体textCopyright Pythondraw.text((50,50),text,fill(255,0,0),fontfont)# 5. 保存base_img.show()base_img.save(watermarked.jpg)五、综合项目批量图片水印工具我们要写一个脚本自动遍历images文件夹下的所有图片在右下角加上半透明的水印并保存到output文件夹。importosfromPILimportImage,ImageDraw,ImageFontdefadd_watermark(input_path,output_path,textPython Pro):try:# 打开图片并转为 RGBA (支持透明度)imgImage.open(input_path).convert(RGBA)width,heightimg.size# 创建一个透明的图层用于画水印txt_layerImage.new(RGBA,img.size,(255,255,255,0))drawImageDraw.Draw(txt_layer)# 设置字体 (尽量找个存在的字体文件)try:font_sizeint(width/20)# 根据图片宽度动态调整字号fontImageFont.truetype(arial.ttf,font_size)except:fontImageFont.load_default()# 计算文字大小 (getbbox 返回 (左, 上, 右, 下))bboxdraw.textbbox((0,0),text,fontfont)text_widthbbox[2]-bbox[0]text_heightbbox[3]-bbox[1]# 计算位置 (右下角留点边距)xwidth-text_width-20yheight-text_height-20# 绘制水印 (最后一个参数 128 是透明度 alpha0-255)# 注意fill 的 RGBA 中 A128 控制文字半透明draw.text((x,y),text,fontfont,fill(255,255,255,128))# 合并图层resultImage.alpha_composite(img,txt_layer)# 保存 (转回 RGB 存为 JPG或者直接存 PNG)# 如果要存 JPG必须转 RGB (因为 JPG 不支持透明)result.convert(RGB).save(output_path)print(f处理完成:{output_path})exceptExceptionase:print(f处理失败{input_path}:{e})defbatch_process():src_dirimagesdst_diroutputifnotos.path.exists(src_dir):print(f请先创建{src_dir}文件夹并放入图片)returnifnotos.path.exists(dst_dir):os.makedirs(dst_dir)forfilenameinos.listdir(src_dir):iffilename.lower().endswith((.png,.jpg,.jpeg)):in_pathos.path.join(src_dir,filename)out_pathos.path.join(dst_dir,filename)add_watermark(in_path,out_path)if__name____main__:batch_process()六、常见问题Q1Image.open报错UnidentifiedImageError这通常是因为文件损坏或者不是有效的图片格式只是改了后缀名。Q2PNG 图片加水印后背景变黑了JPG 不支持透明通道。如果你处理的是透明背景的 PNG保存为 JPG 时透明部分会变成黑色。解决方法是保存为 PNG或者在convert(RGB)之前创建一个白色背景层进行合并。Q3如何截屏Pillow 的ImageGrab模块可以截屏。fromPILimportImageGrab imImageGrab.grab()im.show()七、小结Pillow 图像处理基本操作图像变换绘图 Drawopen() / save()convert() 格式转换resize() / thumbnail()crop() 裁剪rotate() 旋转filter() 滤镜ImageDraw.Draw()draw.text() 写字ImageFont 设置字体关键要点缩略图用thumbnail保持比例不失真。坐标系原点在左上角向右X轴向下Y轴。加水印需要创建ImageDraw对象如有透明度需求需使用 RGBA 模式。八、课后作业九宫格切图编写一个函数将一张正方形图片切割成 9 张小图朋友圈九宫格效果保存到文件夹中。验证码生成器创建一个空白图片随机生成 4 个字母画上去并添加一些随机的噪点或线条干扰线模拟网站验证码。头像圆角化将一张方形头像裁剪成圆形提示使用ImageOps或遮罩 Mask 技术。下节预告Day 43发送邮件 (smtplib)- 程序跑完了结果怎么通知我明天我们学习如何用 Python 自动发送邮件包含附件和漂亮的 HTML 格式。系列导航上一篇Day 41 - 定时任务Schedule下一篇Day 43 - 发送邮件smtplib待更新

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询