各位好,我是宋哈哈,很久没更新文章了,其实这篇代码是我在年前已经写好了。代码呢,也比较冷门适合人很少。仅仅对会AE , PR 视频剪辑, 又要会 python 的人,而且在公司领导又要你来做相册视频,在公司滚动播放。

我呢,在接到公司领导要求后,就需要去收集其他同事的照片,收集后发现,同事们发我的照片尺寸千奇百怪,当然我这里说的是尺寸,不是长相。对于一个要做相册视频的技术工来说,如果你仅仅只会PS和PR或者AE,前期要处理几百张图片的尺寸就够你有的忙的了。PS的“动作”+ "批处理”也确实可以解决这个问题。但是也是很慢。我们首先看下效果图。

在说这个前提,我知道可能大家觉得套个模板不就行了,套模板也不是不行,但是涉及到分辨率问题,模板会直接把脸部什么直接裁剪没了,效果肯定不好。所以就需要把图片处理成统一的尺寸格式和分辨率大小也要一样,这里的分辨率指的是 dpi=72就行。

1.这是需要处理的图片。

图片来源于网络,如有侵权,请联系作者删除。




python 暗图像增强 python图片虚化_python 暗图像增强


有正方形的,也有长方形的。

2.需要的效果图


python 暗图像增强 python图片虚化_python 暗图像增强_02


这是图片处理后的 属性值:


python 暗图像增强 python图片虚化_PIL_03


这样处理好图片之后,我们才能心情愉悦的用PR 或者AE 去做相册视频,这个时候,我就想到了python 来处理图片。利用了Python 的 PIL模块来处理。

以下是代码思路流程图:


python 暗图像增强 python图片虚化_python_04


以下是完整代码分享,我这里就不想讲解 代码了,都有注释,安装好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 工作顺顺利利,财源广进。