Python PIL按比例裁剪图片


Posted in Python onMay 11, 2022

PIL图片如何按比例裁剪

问题描述

如图片比例为 1:1 裁剪为 4:3

1.jpg

Python PIL按比例裁剪图片

解决方案

from PIL import Image
def image_clip(filename, savename, width_scale, height_scale):
    """图像裁剪
    :param filename: 原图路径
    :param savename: 保存图片路径
    :param width_scale: 宽的比例
    :param height_scale: 高的比例
    """
    image = Image.open(filename)
    (width, height), (_width, _height) = image.size, image.size
    _height = width / width_scale * height_scale
    if _height > height:
        _height = height
        _width = width_scale * height / height_scale
    image.crop((0, 0, _width, _height)).save(savename)  # 左上角
    # image.crop((0, height - _height, _width, height)).save(savename)  # 左下角
    # image.crop((width - _width, 0, width, _height)).save(savename)  # 右上角
    # image.crop((width - _width, height - _height, width, height)).save(savename)  # 右下角
if __name__ == '__main__':
    filename = '1.jpg'
    savename = 'result.jpg'
    image_clip(filename, savename, width_scale=4, height_scale=3)
    # image_clip(filename, savename, width_scale=3, height_scale=4)

效果

Python PIL按比例裁剪图片

PIL调整图片大小

使用 PIL 在图片比例不变的情况下修改图片大小。

介绍

Image.resize

def resize(self, size, resample=BICUBIC, box=None, reducing_gap=None):
    """
    Returns a resized copy of this image.
    返回此图像的大小调整后的副本。
    :param size: The requested size in pixels, as a 2-tuple:
       (width, height).
     param size: 请求的大小(以像素为单位),是一个二元数组:(width, height)
    :param resample: An optional resampling filter.  This can be
       one of :py:attr:`PIL.Image.NEAREST`, :py:attr:`PIL.Image.BOX`,
       :py:attr:`PIL.Image.BILINEAR`, :py:attr:`PIL.Image.HAMMING`,
       :py:attr:`PIL.Image.BICUBIC` or :py:attr:`PIL.Image.LANCZOS`.
       Default filter is :py:attr:`PIL.Image.BICUBIC`.
       If the image has mode "1" or "P", it is
       always set to :py:attr:`PIL.Image.NEAREST`.
       See: :ref:`concept-filters`.
     param resample: 一个可选的重采样过滤器。
    :param box: An optional 4-tuple of floats providing
       the source image region to be scaled.
       The values must be within (0, 0, width, height) rectangle.
       If omitted or None, the entire source is used.
     param box: 可选的4元浮点数,提供要缩放的源映像区域。
    :param reducing_gap: Apply optimization by resizing the image
       in two steps. First, reducing the image by integer times
       using :py:meth:`~PIL.Image.Image.reduce`.
       Second, resizing using regular resampling. The last step
       changes size no less than by ``reducing_gap`` times.
       ``reducing_gap`` may be None (no first step is performed)
       or should be greater than 1.0. The bigger ``reducing_gap``,
       the closer the result to the fair resampling.
       The smaller ``reducing_gap``, the faster resizing.
       With ``reducing_gap`` greater or equal to 3.0, the result is
       indistinguishable from fair resampling in most cases.
       The default value is None (no optimization).
     param reducing_gap: 通过两个步骤调整图像大小来应用优化。
    :returns: An :py:class:`~PIL.Image.Image` object.
     returns: 返回一个 PIL.Image.Image 对象
    """

看代码吧

from PIL import Image
 
 
image = Image.open('图片路径')
 
# 调整图片大小,并保持比例不变
# 给定一个基本宽度
base_width = 50
 
# 基本宽度与原图宽度的比例
w_percent = base_width / float(image.size[0])
 
# 计算比例不变的条件下新图的长度
h_size = int(float(image.size[1]) * float(w_percent))
 
# 重新设置大小
# 默认情况下,PIL使用Image.NEAREST过滤器进行大小调整,从而获得良好的性能,但质量很差。
image = image.resize((base_width, h_size), Image.ANTIALIAS)

Tags in this post...

Python 相关文章推荐
Python使用MONGODB入门实例
May 11 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
使用python实现knn算法
Dec 20 Python
python爬虫面试宝典(常见问题)
Mar 02 Python
Python中使用Counter进行字典创建以及key数量统计的方法
Jul 06 Python
Python给图像添加噪声具体操作
Mar 03 Python
python异步存储数据详解
Mar 19 Python
10款最好的Python开发编辑器
Jul 03 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
python操作redis数据库的三种方法
Sep 10 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 Python
python 学习GCN图卷积神经网络
May 11 #Python
Python+Pillow+Pytesseract实现验证码识别
May 11 #Python
Python 绘制多因子柱状图
PyCharm 配置SSH和SFTP连接远程服务器
May 11 #Python
Python 文字识别
May 11 #Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 11 #Python
Python 匹配文本并在其上一行追加文本
May 11 #Python
You might like
也谈 PHP 和 MYSQL
2006/10/09 PHP
php递归列出所有文件和目录的代码
2008/09/10 PHP
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
超清晰的document对象详解
2007/02/27 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
JavaScript中的数组操作介绍
2014/12/30 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
2016/01/05 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
webpack 代码分离优化快速指北
2019/05/18 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
python中黄金分割法实现方法
2015/05/06 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
PyTorch基本数据类型(一)
2019/05/22 Python
python @classmethod 的使用场合详解
2019/08/23 Python
Django重设Admin密码过程解析
2020/02/10 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
建筑工程质量通病防治方案
2014/06/08 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
职工年度考核评语
2014/12/31 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
董事长新年致辞
2015/07/29 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书