各位好,我是宋哈哈,很久没更新文章了,其实这篇代码是我在年前已经写好了。代码呢,也比较冷门适合人很少。仅仅对会AE , PR 视频剪辑, 又要会 python 的人,而且在公司领导又要你来做相册视频,在公司滚动播放。
我呢,在接到公司领导要求后,就需要去收集其他同事的照片,收集后发现,同事们发我的照片尺寸千奇百怪,当然我这里说的是尺寸,不是长相。对于一个要做相册视频的技术工来说,如果你仅仅只会PS和PR或者AE,前期要处理几百张图片的尺寸就够你有的忙的了。PS的“动作”+ "批处理”也确实可以解决这个问题。但是也是很慢。我们首先看下效果图。
在说这个前提,我知道可能大家觉得套个模板不就行了,套模板也不是不行,但是涉及到分辨率问题,模板会直接把脸部什么直接裁剪没了,效果肯定不好。所以就需要把图片处理成统一的尺寸格式和分辨率大小也要一样,这里的分辨率指的是 dpi=72就行。
1.这是需要处理的图片。
图片来源于网络,如有侵权,请联系作者删除。
有正方形的,也有长方形的。
2.需要的效果图
这是图片处理后的 属性值:
这样处理好图片之后,我们才能心情愉悦的用PR 或者AE 去做相册视频,这个时候,我就想到了python 来处理图片。利用了Python 的 PIL模块来处理。
以下是代码思路流程图:
以下是完整代码分享,我这里就不想讲解 代码了,都有注释,安装好PIL 模块,就可以用。
代码只是处理了一个图片,如果要批量处理,自己写一个os 读取文件夹,然后用for 循环就行。
代码环境:pycharm 2020.1.3 , python 3.6.8 ,windows 11
#encoding:utf-8
from PIL import ImageGrab
from PIL import Image,ImageFilter
from PIL import Image
import os
def imageProcessing(picturePath):
# 1.读取图片大小/尺寸
img = Image.open(picturePath)
img = img.convert('RGB')
w = img.width # 图片的宽
h = img.height # 图片的高
# 2.裁剪成 1.7:1,并修改尺寸为 1920*1080
cropPoint = h / 3 # 裁剪开始点
cropEndPoint = (w / (1920 / 1080)) + cropPoint
region = img.crop((0, cropPoint, w, cropEndPoint))
pic_new = region.resize((1920, 1080), Image.ANTIALIAS)
# 3.把背景图片进行 平均模糊虚化处理
# 应用盒式模糊过滤器
boxImage = pic_new.filter(ImageFilter.BoxBlur(20))
# createFolder(os.path.join('IMG',categoryFolder))
# # boxImage = img.convert('RGB')
# # 保存盒式模糊的图像
# boxImage.save('bg.jpg')
mergeSavePath = 'MERGER' # 保存文件路径
createFolder(mergeSavePath) # 创建路径
savePath = os.path.join(mergeSavePath,"merger_"+picturePath) # 拼接路径和图片文件
# boxImage: 模糊照片,picturePath:需要的处理图片路径;savePath:保存路径
pictureOverlay(boxImage, picturePath,savePath)
def pictureOverlay(backgroundImagePath,picturePath,savePicturePath):
"""
:param backgroundImagePath: 由 imageProcessing(picturePath) 产生的1920*1080 的图片背景
:param picturePath: 原始的未处理的图片
:param savePicturePath: 合并后保存的路径
:return:
"""
# bg = Image.open(backgroundImagePath) # 背景图片
bg = backgroundImagePath # 背景图片
backgroundImage_width = bg.width # 背景图片 图片的宽
backgroundImage_height = bg.height # 背景图片 图片的高
originalPicture = Image.open(picturePath) # 4 channel png image
originalPicture_width = originalPicture.width # 源图片的宽
originalPicture_height = originalPicture.height # 源图片的高
# 计算比例
multiple = backgroundImage_height / originalPicture_height # 计算出缩放倍数
#适应图片 修改宽高
widthAfterScaling = int(originalPicture_width * multiple) # 适应等比 宽长度
heightAfterScaling = int(originalPicture_height * multiple) # 适应等比 高长度
pic_new = originalPicture.resize((int(widthAfterScaling), int(heightAfterScaling)), Image.ANTIALIAS) # 宽,高 等比适尺寸
#合并图片叠加在一起
x = int(backgroundImage_width / 2) - int(widthAfterScaling / 2)
bg.paste(pic_new, (x, 0))
bg.save(savePicturePath,dpi=(72.0,72.0))
# bg.show()
print(f'{savePicturePath} 修改成功')
def createFolder(path):
"""
创建文件夹
:return:
"""
while True:
if os.path.isdir(path):
break
else:
os.makedirs(path)
def runx():
"""
执行文件
:return:
"""
imgPath = 'r.jpg' # 需要处理的图片
imageProcessing(imgPath)
if __name__ == '__main__':
runx()
如果这篇文章对你有帮助,记得点个收藏和关注。谢谢老铁,祝你2023 工作顺顺利利,财源广进。