前言
大家在工作的时候是不是都会接触到很多的图片,为了满足不同的需求:
兼容性:不同设备和应用程序可能支持不同的图片格式。通过转换图片格式,可以确保在各种设备和应用程序中都能够正确地显示图片。
文件大小:不同的图片格式具有不同的文件大小。有时候,将图片从一种格式转换为另一种格式可以显著减小文件大小,这有助于在网络上更快地加载图片。
质量:有些图片格式对于特定类型的图像效果更好。通过转换图片格式,可以选择更适合特定图像的格式,从而提高图像质量。
编辑能力:不同的图片格式支持不同的编辑功能。通过将图片转换为支持所需编辑功能的格式,可以更轻松地进行编辑工作。
如果我们需要把图片转换成文件,用Python学习的知识是不是能实现呢?
Python模块之Image的应用示例
- 首先需要导入需要的图像库:
import Image
- 读取一张图片:
im=Image.open(‘/home/Picture/test.jpg’)
- 显示一张图片:
im.show()
- 保存图片:
im.save(“save.gif”,“GIF”) #保存图像为gif格式
- 创建新图片:
Image.new(mode,size)
Image.new(mode,size,color)
栗子:newImg = Image.new(“RGBA”,(640,480),(0,255,0))
newImg.save(“newImg.png”,“PNG”)
6.两张图片相加:
Image.blend(img1,img2,alpha) # 这里alpha表示img1和img2的比例参数
- 点操作:
im.point(function) #,这个function接受一个参数,且对图片中的每一个点执行这个函数
比如:out=im.point(lambdai:i*1.5)#对每个点进行50%的加强
- 查看图像信息:
im.format, im.size, im.mode
- 图片裁剪:
box=(100,100,500,500)
#设置要裁剪的区域
region=im.crop(box) #此时,region是一个新的图像对象。
- 图像黏贴(合并)
im.paste(region,box)#粘贴box大小的region到原先的图片对象中。
- 通道分离:
r,g,b=im.split()#分割成三个通道,此时r,g,b分别为三个图像对象。
- 通道合并:
im=Image.merge(“RGB”,(b,g,r))#将b,r两个通道进行翻转。
- 改变图像的大小:
out=img.resize((128,128))#resize成128*128像素大小
- 旋转图像:
out=img.rotate(45) #逆时针旋转45度
有更方便的:
region = region.transpose(Image.ROTATE_180)
- 图像转换:
out = im.transpose(Image.FLIP_LEFT_RIGHT)
#左右对换。
out = im.transpose(Image.FLIP_TOP_BOTTOM)
#上下对换
- 图像类型转换:
im=im.convert(“RGBA”)
- 获取某个像素位置的值:
im.getpixel((4,4))
- 写某个像素位置的值:
img.putpixel((4,4),(255,0,0))
图片批量转换和尺寸调整代码示例
'''
图片格式批量转换
'''
def istype(filetype):
'''
判断是否为图片文件
:param filetype: 文件扩展名
:return: 是,返回True,不是,返回False
'''
filetype = filetype.lower() # 扩展名转换为小写
# 判断是否为图片格式
if filetype == '.jpg' or filetype=='.jpeg' or filetype=='.png' or filetype=='.gif' or filetype=='.bmp' or filetype=='.tif':
return True # 返回True
else:
return False
def thumpic(filepath, width, height):
try:
image = Image.open(filepath) # 打开图片文件
# 按指定大小对图片进行缩放(不一定完全按照设置的宽度和高度,而是按比例缩放到最接近的大小)
image.thumbnail((width, height))
# 下面的方法会以严格按指定大小对图片进行缩放,但可能会失真
# image = image.resize((width, height))
image.save(filepath) # 保存缩放后的图片
# print('图片处理完成……')
# os.startfile(path) # 打开指定路径进行预览
except Exception as e:
print(e)
import os
from PIL import Image
while True:
oldpath = input('请输入要转换格式的图片路径:')
newpath = input('请输入转换格式后的图片保存路径:')
flag = int(input('''要转换的格式:
1、jpg 2、jpeg 3、png 4、gif 5、bmp 6、tif
请选择:'''))
width=int(input('请输入宽度限制:'))
height=int(input('请输入高度限制:'))
list = os.listdir(oldpath) # 遍历选择的文件夹
for i in range(0, len(list)): # 遍历文件列表
filepath = os.path.join(oldpath, list[i]) # 记录遍历到的文件名
if os.path.isfile(filepath): # 判断是否为文件
filename= os.path.splitext(list[i])[0] # 获取文件名
filetype = os.path.splitext(list[i])[1] # 获取扩展名
if istype(filetype): # 判断是否为图片文件
img = Image.open(filepath) # 打开图片文件
# 根据选择的格式转换图片,并保存
if flag == 1:
img=img.convert('RGB') # 将图片转换为RGB格式,因为jpg格式不支持透明度
img.save(os.path.join(newpath,filename+'.jpg'),'jpeg')
thumpic(os.path.join(newpath,filename+'.jpg'), width, height)
elif flag == 2:
img = img.convert('RGB')
img.save(os.path.join(newpath, filename + '.jpeg'),'jpeg')
thumpic(os.path.join(newpath,filename+'.jpeg'), width, height)
elif flag == 3:
img.save(os.path.join(newpath, filename + '.png'),'png')
thumpic(os.path.join(newpath,filename+'.png'), width, height)
elif flag == 4:
img.save(os.path.join(newpath, filename + '.gif'),'gif')
thumpic(os.path.join(newpath,filename+'.gif'), width, height)
elif flag == 5:
img.save(os.path.join(newpath, filename + '.bmp'),'bmp')
thumpic(os.path.join(newpath,filename+'.bmp'), width, height)
elif flag == 6:
img.save(os.path.join(newpath, filename + '.tif'), 'tiff')
thumpic(os.path.join(newpath,filename+'.tif'), width, height)
os.startfile(newpath)
print('格式转换完成……')
最后
文章中对Python代码批量转换图片格式和尺寸的问题做了详细的代码示例和注释说明,希望对看到的小伙伴有帮助。
之前的文章中有对图片添加水印的代码示例,也可以多学习借鉴哦。
Python代码学习之给图片添加文字或图片水印