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
Python使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
Python中使用HTMLParser解析html实例
Feb 08 Python
详解Python3中的Sequence type的使用
Aug 01 Python
Python内置函数delattr的具体用法
Nov 23 Python
关于Python的一些学习总结
May 25 Python
详解django中使用定时任务的方法
Sep 27 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
详解python 破解网站反爬虫的两种简单方法
Feb 09 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
Jun 17 Python
Python 爬虫性能相关总结
Aug 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
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
javascript操作符"!~"详解
2015/02/10 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
Request的中断和ErrorHandler实例解析
2018/02/12 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
python中字符串的编码与解码详析
2020/12/03 Python
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
中国文明网签名寄语
2014/01/18 职场文书
安全大检查实施方案
2014/02/22 职场文书
2014国培学习感言
2014/03/05 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python
Win11查看设备管理器
2022/04/19 数码科技
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers