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中list循环语句用法实例
Nov 10 Python
Python日志模块logging简介
Apr 13 Python
python实现计算倒数的方法
Jul 11 Python
在Django框架中编写Context处理器的方法
Jul 20 Python
python字典键值对的添加和遍历方法
Sep 11 Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 Python
python编程培训 python培训靠谱吗
Jan 17 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
Jul 09 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
Python发展简史 Python来历
May 14 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 Python
python实现xml转json文件的示例代码
Dec 30 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 制作简单的留言本
2009/11/02 PHP
php函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
Python 文件操作实现代码
2009/10/07 Python
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
存储过程的优点有哪些
2012/09/27 面试题
公益广告宣传方案
2014/02/28 职场文书
产品质量承诺书
2014/03/27 职场文书
从事会计工作年限证明
2015/06/23 职场文书
旅行社计调工作总结
2015/08/12 职场文书
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android
HTML5页面打开微信小程序功能实现
2022/09/23 HTML / CSS