Python如何对图片进行缩放,旋转,翻转,添加文字以及如何截取并粘贴图像到图片中

有时候我们需要批量的对图片进行一些简单的处理,比如说,将一些照片调整为统一的尺寸,或者添加一些简单的文字内容到图片或者截图中,用手机操作或者用PS之类的工具感觉很麻烦。比如最近由于疫情的原因,学校经常需要家长,把健康码,通行码等内容加上名字后,发给学校,每次都要重复的把同样的文字添加到截图上去很不方便。而使用Python,只要写几段代码就可以只用几秒钟就完成,这部分的代码我放到了另一篇文章「通过Python在健康码,行程卡的截图上添加文字内容,省心省力」中,如有需要,请点击查看。

接下来,本文将通过调用Python代码对图片的一些基本操作进行简要说明:

首先,对缩放、旋转和翻转进行简要的介绍

#开始之前,先要导入所需要模块
from PIL import Image, ImageDraw, ImageFont

关于图片的缩放比较容易理解,但是要注意的是,仅调用缩放函数并不会改变当前图像的尺寸,需要通过重新赋值才可以完成缩放内容的传递,官方文档中的说明是,Returns a resized copy of this image. 就是返回一个本图像调整尺寸后的复制内容。关于图片缩放后的尺寸设定,可以参考如下代码,图片尺寸只能是整数:

# 获取图片的原始尺寸,再按一定的比例进行设定
size = (int(img.size[0] * 0.5), int(img.size[1] *0.5)) # 和上一句的意思一样, 上一句是×50%后取整,这里是除2后取整
size = (img.size[0] // 2, img.size[1] // 2)#设定尺寸为800*600
size = (800,600) #将图像Img 调整尺寸后 重新赋值给自己,size的内容任选上述一种即可。
img = img.resize(size)

关于图像的旋转,有时候容易出现理解偏差,rotate是旋转,Transpose是变换位置,本文用翻转来指代。这两个功能的说明如下:

img.rotate(90) 是旋转90度,
这里要注意,只是对于图像内容进行旋转,图片文件本身(或者可以理解为画布)并不会旋转。

Image.Transpose.ROTATE_90,是翻转90度,通过执行这条语句,整个画布才会翻转。

具体的区别如下图如示,调用这两个功能后也需要重新赋值后才能传递旋转后的内容:

接下来,简要介绍如何往图片中添加文字

添加文字内容,需要用到PIL的ImageDraw, ImageFont模块,主要的代码如下:

# 如果需要在图片上添加文字,可以通过ImageDraw来进行操作
draw = ImageDraw.Draw(img)# 添加文字前还设置需要设定字体以及文字格式,包括字号
fontpath = "font/simsun.ttc"
fontStyle = ImageFont.truetype(fontpath, 80)# 调用添加文字的函数,所需参数分别是:位置,文字内容,颜色,字体
draw.text(( (2350+270), (1280+150)), "〈- 截取此方块", (255,255,255), font=fontStyle)

添加文字后的效果如下图如示:

最后,简单说明一下如何从图片中截取内容并粘贴到图像中

关于截取图片中的内容,可能会有比较多的方式,这里只介绍如何截取矩形区域的图像,代码只有一句,就是指定矩形区域的左上角位置和右下角的位置,具体如下:

# 比如左上角的点位坐标为 横向x=2350,竖向y=1280,
# 右下角的位置,则可以是左上角的位置+长和宽,比如这里的长270,和宽260
# 图像截取后,赋值给一个新的变量。
img_cut = img.crop((2350, 1280, (2350+270), (1280+260)))

这里通过循环语句将截取的内容旋转后放到指定的位置,效果如下图所示:

以上就是关于Python如何对图像进行缩放,旋转,翻转,以及文字添加和图片的截取等操作的简要说明,以下是全部的相关代码:

"""
Title : Resize, Rotate, Transpose and Put Text on Image
Author: Le Miaokai
Date  : 2022-10-19
LeMiaokai@Gmail.com
""""""# 第一步, 导入所需要模块"""
from PIL import Image, ImageDraw, ImageFont"""# 第二步, 读取本地图片文件,并显示图片文件的基本信息(本案例中的图片来源于 Unsplash)"""
# 用于测试的图片原文件完整路径,只写名字表示与代码在同一文件夹
img_path =r"Test_pic.jpg"
# 读取原图片文件,并显示图片文件的一些基本信息,文件大小,格式以及格式描述
img = Image.open(img_path)
print(img.size)
print(img.format)
print(img.format_description)"""# 第三步, 将图像翻转90度,并缩小比例后存储为新的图像文件"""
# 用于存放测试1生成的图片,这里用于存放图片尺寸缩小,并旋转90度之后的文件。
img1_path = r"Test_pic1.jpg"
# 通过transpose,将图片转置90度,画面和图片文件,都旋转了90度。正常。
# Deprecation Warning: ROTATE_90 is deprecated and will be removed in Pillow 10 (2023-07-01). Use Transpose.ROTATE_90 instead.
#img1 = img.rotate(90)
img1 = img.transpose(Image.Transpose.ROTATE_90)# 设定图片缩小后的尺寸大小,这里为各缩小50%, 也直接设定缩放后的图片尺寸
size = (int(img1.size[0] * 0.5), int(img1.size[1] *0.5))
img1 = img1.resize(size)
# 将原图片,缩小尺寸后,另保存为img1
img1.save(img1_path)"""
这里需要注意两点:
1 . img.resize() 不会直接改变当前图片img的内容,而是会生成一个新的图片内容,所以需要赋值才可以获取到改变尺寸后的图片比如:img1 = img.resize(size)2 . img.rotate(90),可以让图像旋转90度,但是画布仍然是原先的尺寸,所以图片旋转后保存的话,整个图片文件的尺寸没有变化,只是图像旋转了。如下图一所示所以,如果通过img1 = img.rotate(90)这句代码,得不到整个图片旋转90度的效果,需要采用img1 = img.transpose(Image.Transpose.ROTATE_90)来完成。
""""""# 第四步, 往原图片中添加文字注释,并加添加文字内容后的图片保存到新的图片文件中"""
# 如果需要在图片上添加文字,可以通过ImageDraw来进行操作
draw = ImageDraw.Draw(img)
#设置需要显示的字体
fontpath = "font/simsun.ttc"
fontStyle = ImageFont.truetype(fontpath, 80)
# 所需参数分别是:位置,文字内容,颜色,字体
draw.text(( (2350+270), (1280+150)), "〈- 截取此方块", (255,255,255), font=fontStyle) # 用于存放测试2生成的图片,这里用于存放,在图片中添加文字内容后的图像
img2_path = r"Test_pic2.jpg"
img.save(img2_path)"""# 第五步, 从原始图片文件中,截取一块内容,粘贴到图像中,并保存为新的图像文件"""
# 从原图片img中截取具体位置的图像内容,坐标点分别为x1,y1,左上角的位置点,x2,y2右下角的位置点
# 本案例中截取的是红色的方块,位置如图片如示
img_cut = img.crop((2350, 1280, (2350+270), (1280+260)))
# 通过循环语句,将img3 贴到存放原图片的变量中,
for x in range(1,7):for y in range(1,3):# 将img3贴到img中,其中+100,为图片间距img.paste(img_cut, ((260+100) * y , (270+100) * x))# 每次贴图后,将截图区域旋转60度,img_cut = img_cut.rotate(60)# 通过生成的图像,可以看出,虽然通过rotate可以将截取的图片旋转任意角度,但是图片旋转之后的底色仍然会保留,本案例中底色是黑色# 另外,当图片旋转后,被截除的部分,将不会再通过旋转函数恢复,本案例设置了每次旋转60度,效果如图所示。# 用于存放测试3生成的图片,这里用于存放在图片中添加截取内容后的图像文件。
img3_path = r"Test_pic3.jpg"
# 将图片缩小到原图1/2的大小。
img3 = img.resize((img.size[0] // 2, img.size[1] // 2))
# 保存图片。
img3.save(img3_path)

关于python对图片的缩放,旋转,翻转以及添加文字和图片截取粘贴的操作,先简单介绍这些,希望本文内容能对你有所启发,如有不足之处,请指出,谢谢!

Python如何对图片进行缩放,旋转,翻转,添加文字以及如何截取并粘贴图像到图片中相关推荐

  1. Python中的PIL给图片添加文字

    与朋友在微信的聊天过程中,少不了要用一些表情包来表达自己,又可以活跃气氛.大部分表情包是由图片加上文字的结构构成.微信自带的表情包需要下载.我们可以用Python编程来往自己的照片上添加文字来生成表情 ...

  2. Python代码学习之给图片添加文字或图片水印

    前言 图片加水印有什么好处?在现今的数字化时代,网络上的图片泛滥,盗图现象也越来越严重.因此,在发布文章时,为了保护自己的原创作品版权,很多人选择使用水印来保护他们的图片.这样就能更好地做到: 1.版 ...

  3. python 读取gif_2020-09-11 python 读取gif文件并简单添加文字

    无聊时第一生产力,首先时因为我看见了一张比较有意思的图片~ IMG_5551(20200911-160010).JPG 之后,我又看到了这个动图: IMG_5552.GIF 随后,我就有了以下的想法: ...

  4. D3D 中LPD3DXSPRITE(点精灵)对图片进行缩放旋转透明处理

    D3DXMatrixTransformation2D 函数的具体内容http://blog.csdn.net/bojie5744/article/details/34424355 点精灵的创建     ...

  5. python opencv 如何给图片添加文字?cv2.putText() PIL

    参考文章1:python如何在图片上添加文字(中文和英文)Python在图片上添加文字的两种方法:OpenCV和PIL 参考文章2:python之------如何在图片上面添加文字(多种类型的文字)[ ...

  6. 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

    javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...

  7. python如何移动图片_python之详细图像仿射变换讲解(图像平移、旋转、缩放、翻转),一文就够了,赶紧码住...

    仿射变换简介 什么是放射变换 图像上的仿射变换, 其实就是图片中的一个像素点,通过某种变换,移动到另外一个地方. 从数学上来讲, 就是一个向量空间进行一次线形变换并加上平移向量, 从而变换到另外一个向 ...

  8. python图片翻转、添加文字、添加方框(附论文-图像局部放大代码,亲测可用)

    一.opencv 给图片添加文字 import cv2 img = cv2.imread('caijian.jpg') font = cv2.FONT_HERSHEY_SIMPLEXimgzi = c ...

  9. Python 读取图,旋转,缩放(PIL, matplotlib)

    Python 读取图,旋转,缩放(PIL, matplotlib) 2017-05-03 12:54 1133人阅读 评论(0) 收藏 举报  分类: python(20)  版权声明:本文为博主原创 ...

  10. [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

最新文章

  1. pytest文档21-pytest-html报告优化(nodeid中文显示[\u6350\u52a9\u6211\u4eec]问题解决)
  2. 丁磊建议将少儿编程纳入学业水平考试,是少儿编程太热,还是起跑线焦虑
  3. js 禁止复制粘贴全选
  4. hutool 读取扩展名文件_用卓语言实现中文编程显示隐藏文件扩展名
  5. capslock键英语怎么读_刚开始读英文原版书该怎么做?商务英语专业有前途吗?...
  6. mongodb可视化工具 linux,Linux中安装启动MongoDB与可视化工具
  7. 排队五小时才能吃上一口的Popeyes,要借阿里云数据中台10年内开足1500家门店
  8. Windows上设置Docker共享盘符
  9. c语言程序设计基础广西师范大学漓江学院,广西师范大学漓江学院试卷-计算机基础A方案.doc...
  10. 装扮圣诞海报气氛,你需要这些小元素!
  11. 加密后变成乱码解密_个人磁盘加密软件,使用VeraCrypt进行整盘加密介绍
  12. python办公室应用_Python干货:玩转办公室软件(一)PP还能这样玩!
  13. PCL之ubuntu安装CloudCompare
  14. 操作系统银行家算法(课程设计报告)JAVA实现
  15. 使用axis调用WebService,Java WebService调用工具类
  16. java判断移动端和pc端_Java判断PC端还是移动端
  17. 介数中心度与紧密中心度_将开发团队与技术紧密结合的6种方法
  18. 安森美推出ecoSpin系列,重新定义无刷直流电机控制
  19. 微信小程序图片裁剪插件image-cropper
  20. c语言求数字b在a中出现次数,编写一个函数void fun(char *tt,int pp[]),统计在tt字符中a到z26各字母各自出现的次数,并依次放在pp所指的数组中。...

热门文章

  1. 小米开发版安装magisk_小米9SE不刷recovery直接安装Magisk面具的详细教程
  2. 移动硬盘访问错误 - 磁盘结构损坏且无法读取、拒绝访问
  3. glide 设置宽高_Android之ImageView加载图片保持宽高比
  4. 【无标题】免费公众号对接电影自动回复功能教程详解
  5. 小福利,excel采用下拉框控件和复选框控件制作图表
  6. 【概率论】4-3:方差(Variance)
  7. 使用Flash地图控件AnyMap创建Self Drilldown Maps
  8. win10/win11无损扩大C盘空间,跨盘合并C、E盘
  9. c语言程序文件夹里没看到prj,求教。如何调用编好的函数。如何使用prj文件
  10. html anki编辑器,打造你的专属单词本——Anki 初探(无痛入门)