Python3 PIL处理任意尺寸图片为1920*1080 图片模糊 虚化 图片合并居中叠加

news2024/11/28 14:45:09

各位好,我是宋哈哈,很久没更新文章了,其实这篇代码是我在年前已经写好了。代码呢,也比较冷门适合人很少。仅仅对会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 工作顺顺利利,财源广进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MSBuild 命令行编译Delphi

为了构建项目,IDE现在使用MSBuild而不是以前的内部生成系统。IDE中的build、compile和make命令调用Microsoft的新生成引擎:MSBuild,它提供了全面的依赖性检查。MSBuild项目文件基于XML,包含描述项目的特定项、属性、任务和目标的部…

[GWCTF 2019]枯燥的抽奖

目录 信息收集 知识回顾 解题思路 信息收集 查看源码&#xff0c;发现check.php <?php #这不是抽奖程序的源代码&#xff01;不许看&#xff01; header("Content-Type: text/html;charsetutf-8"); session_start(); if(!isset($_SESSION[seed])){ $_SESSIO…

html表格

1.基本标签 标签名说明table表示整体&#xff0c;用于包裹多个trtr表格每行&#xff0c;用于包裹tdtd表格单元格&#xff0c;用于包裹内容 注意点&#xff1a; 表格嵌套关系&#xff1a;table>tr>td 表格table的常见属性&#xff1a; 修饰table属性的标签 需要写道tab…

【FA-GAN:超分辨率MRI图像】

FA-GAN: Fused attentive generative adversarial networks for MRI image super-resolution &#xff08;FA-GAN&#xff1a;融合注意生成对抗网络的MRI图像超分辨率&#xff09; 高分辨率磁共振图像可以提供细粒度的解剖信息&#xff0c;但是获取这样的数据需要长的扫描时间…

UVA11426 - GCD - Extreme (II)(数论,欧拉函数)

题目链接&#xff1a;GCD - Extreme (II) - UVA 11426 - Virtual Judge (vjudge.net)​​​​​ 题意 给一个数N&#xff0c;求&#xff1a; ​​​​​​​ 其中&#xff0c;多组输入&#xff0c;输入以0结束&#xff0c;保证答案在long long范围内。 思路 很好的一道题…

移动web主轴设置和flex总结

移动web主轴设置和flex总结设置主轴方向修改主轴经常的使用场景&#xff1a;弹性盒子换行设置侧轴对齐方式flex 总结梳理主轴排列方式侧轴对齐方式-单行对齐侧轴对齐方式-多行弹性盒子换行设置主轴方向伸缩比设置主轴方向 主轴默认是水平方向, 侧轴默认是垂直方向 修改主轴方…

Linux常用命令——semanage命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) semanage 默认目录的安全上下文查询与修改 补充说明 semanage命令是用来查询与修改SELinux默认目录的安全上下文。SELinux的策略与规则管理相关命令&#xff1a;seinfo命令、sesearch命令、getsebool命令、set…

天地图矢量注记图坑

http://lbs.tianditu.gov.cn/server/MapService.html瓦片图案例见下文&#xff0c;注意其中的LAYER:&#xff0c;记住口诀&#xff0c;地址里用什么&#xff0c;这个layer就用什么。比如影像注记里&#xff0c;地址用了cia_w&#xff0c;那么这个layer后面必须是cia_w&#xff…

别总写代码,这130个网站比涨工资都重要

今天推荐一些学习资源给大家&#xff0c;当然大家可以留言评论自己发现的优秀资源地址 搞学习 找书籍 冷知识 / 黑科技 写代码 资源搜索 小工具 导航页&#xff08;工具集&#xff09; 看视频 学设计 搞文档 找图片 搞学习 TED&#xff08;最优质的演讲&#xff09;&#xff1…

解析JVM类加载器

文章目录1、何为类加载器2、三层类加载器3、双亲委派模型参考资料&#xff1a;《深入理解Java虚拟机》 1、何为类加载器 类加载过程中&#xff0c;加载阶段第一步操作就是通过一个类的全限定名获取此类的二进制字节流。实现这个动作的代码就是类加载器。 任意一个类都必须由加…

mybatis-plus1(前言技术)

目录 一、Mybatis-plus入门 1.什么是mybatis-plus 2.初体验 ① 准备数据库脚本 ② 初始化工程 ③ 编码 ④ 开始使用 3.日志 二、Mybatis-plus主键生成策略 1.更新 三、Mybatis-plus自动填充 1&#xff1a;通过数据库完成自动填充 2&#xff1a;使用程序完成自…

gensim中的word2vec使用

介绍 一句话&#xff0c;GensimGensimGensim中的word2vec类就是用来训练词向量的&#xff0c;这个类实现了词向量训练的两种基本模型skip−gramskip-gramskip−gram和CBOWCBOWCBOW,可以通过后面的参数设置来选择&#xff0c;。但是&#xff0c;在Gensim这个模块中训练词向量的…

什么是盒子模型?

什么是盒子模型&#xff1f; 盒子模型组成有 4 部分,分别为:内容 内边距 外边距(一般不计入盒子实际宽度) 边框 盒子模型有 2 种:标准盒子模型与怪异盒子模型 标准盒子模型content(内容)border(边框)padding(内边距) 怪异盒子模型content(内容)(已经包含了 padding 和 border) …

随手查——Lumerical

Lumerical小白学习的一些记录&#xff0c;以防自己忘记&#xff0c;持续更。。。 快速导航1、如何设置网格2、关于窗口的一些操作&#xff08;1&#xff09;窗口的最大化与复原&#xff08;2&#xff09;窗口的关闭与开启1、如何设置网格 【View】→【Drawing grid】→【Edit …

ctfshow代码审计篇

文章目录web301-SQL注入web302- sql写shellweb303- insertweb304- 报错注入web305- 反序列化蚁剑连接数据库web306- 反序列化web307- shell_exce()web308- ssrf打mysqlweb309- ssrf打fastcgiweb310- ssrffastcfgi写shellweb301-SQL注入 check.php $username$_POST[userid]; $u…

php实现短链接系统

依据第二种算法&#xff0c;URL长连接转短连接实现方法如下&#xff1a; 语言&#xff1a;PHP5.6 服务器环境&#xff1a;LNMP 假设&#xff1a;长连接地址&#xff1a;http://www.test.com/index.php 短连接地址&#xff1a;http://t.test.com/六位code码 第一步&#xff…

Ubuntu18上安装搜狗输入法

一、说明 在ubuntu上安装中文输入法会经常遇到问题。本文是作者经过历次艰苦卓绝的努力后&#xff0c;安装成功的总结。这里稍作记录&#xff0c;以便日后安装时查询。 二、版本选择 注意&#xff1a;目前的搜狗和ubuntu版本是有个配套问题&#xff0c;如下表所列&#xff1a; …

【Typescript学习】使用 React 和 TypeScript 构建web应用(一)预览成品、初始化react项目、常见类型

教程来自freecodeCamp&#xff1a;【英字】使用 React 和 TypeScript 构建应用程序 跟做&#xff0c;仅记录用 其他资料&#xff1a;https://www.freecodecamp.org/chinese/news/learn-typescript-beginners-guide/ 第一天 1 学习目标&#xff08;我个人的&#xff09; 入门 …

开启前端CSS学习之路-css001

&#x1f60a;博主页面&#xff1a;鱿年年 &#x1f449;博主推荐专栏&#xff1a;《WEB前端》&#x1f448; ​&#x1f493;博主格言&#xff1a;追风赶月莫停留&#xff0c;平芜尽处是春山❤️ 目录 前言 一、CSS简介 1.HTML的局限性 2.CSS-网页美容师 3.CSS语法规范…

ccflow 代码

java 工作流的开发框架目录概述需求&#xff1a;设计思路实现思路分析1.工作流参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge S…