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 translator使用实例
Sep 06 Python
pymongo给mongodb创建索引的简单实现方法
May 06 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
Apr 11 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
Python Learning 列表的更多操作及示例代码
Aug 22 Python
Python中字符串与编码示例代码
May 20 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
sklearn的predict_proba使用说明
Jun 28 Python
Visual Studio Code搭建django项目的方法步骤
Sep 17 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出错界面
2006/10/09 PHP
理解PHP5中static和const关键字的区别
2007/03/19 PHP
JavaScript基本对象
2007/01/11 Javascript
js兼容标准的表格变色效果
2008/06/28 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
详解.vue文件解析的实现
2018/06/11 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
python爬取哈尔滨天气信息
2018/07/14 Python
python绘制热力图heatmap
2020/03/23 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
使用Python为中秋节绘制一块美味的月饼
2019/09/11 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
python中threading开启关闭线程操作
2020/05/02 Python
Python中lru_cache的使用和实现详解
2021/01/25 Python
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
中医临床专业自我鉴定范文
2014/01/15 职场文书
运动会通讯稿150字
2014/02/15 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
大学军训决心书
2015/02/05 职场文书
课题研究阶段性总结
2015/08/13 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL